`

调优Apache Kafka集群

阅读更多

  使用默认的Kafka参数配置你就能够从零搭建起一个Kafka集群环境用于开发及测试之用,但默认配置通常都不匹配你的生产环境,因此必须要做某种程度的调优。毕竟不同的使用场景有着不同的使用需求和性能指标。而Kafka提供的各种参数就是为了优化这些需求和指标的。Kafka提供了很多配置供用户设置以确保搭建起来的Kafka环境是能够满足需求目标的,因此详细地去调研这些参数的含义以及针对不同参数值进行测试是非常重要的。所有这些工作都应该在Kafka正式上生产环境前就做好,并且各种参数的配置要考虑未来集群规模的扩展。

   执行优化的流程如下图所示:

  1. 明确调优目标
  2. 有针对性地配置Kafka server端和clients端参数
  3. 执行性能测试,监控各个指标以确定是否满足需求以及是否有进一步调优的可能

一、确立目标 

  第一步就是要明确性能调优目标,主要从4个方面考虑:吞吐量(throughput)、延时(latency)、持久性(durability)和可用性(availability)。根据实际的使用场景来确定要达到这4个中的哪个(或哪几个)目标。有时候我们可能很难确定自己到底想要什么,那么此时可以尝试采用这样的方法:让你的团队坐下来讨论一下原本的业务使用场景然后看看主要的业务目标是什么。确立目标的原因主要有两点:

  • “鱼和熊掌不可兼得”——你没有办法最大化所有目标。这4者之间必然存在着权衡(tradeoff)。常见的tradeoff包括:吞吐量和延时权衡、持久性和可用性之间权衡。但是当我们考虑整个系统时通常都不能孤立地只考虑其中的某一个方面,而是需要全盘考量。虽然它们之间不是互斥的,但使所有目标同时达到最优几乎肯定是不可能的
  • 我们需要不断调整Kafka配置参数以实现这些目标,并确保我们对Kafka的优化是满足用户实际使用场景的需要

  下面的这些问题可以帮助你确立目标:

  • 是否期望着Kafka实现高吞吐量(TPS,即producer生产速度和consumer消费速度),比如几百万的TPS?由于Kafka自身良好的设计,生产超大数量的消息并不是什么难事。比起传统的数据库或KV存储而言,Kafka要快得多,而且使用普通的硬件就能够做到这点
  • 是否期望着Kafka实现低延时(即消息从被写入到被读取之间的时间间隔越小越好)? 低延时的一个实际应用场景就是平时的聊天程序,接收到某一条消息越快越好。其他的例子还包括交互性网站中用户期望实时看到好友动态以及物联网中的实时流处理等
  • 是否期望着Kafka实现高持久性,即被成功提交的消息永远不能丢失?比如事件驱动的微服务数据管道使用Kafka作为底层数据存储,那么就要求Kafka不能丢失事件。再比如streaming框架读取持久化存储时一定要确保关键的业务事件不能遗漏等
  • 是否期望着Kafka实现高可用?即使出现崩溃也不能出现服务的整体宕机。Kafka本身是分布式系统,天然就是能够对抗崩溃的。如果高可用是你的主要目标,配置特定的参数确保Kafka可以及时从崩溃中恢复就显得至关重要了

二、配置参数

下面我们将分别讨论这四个目标的优化以及对应的参数设置。这些参数涵盖了producer端、broker端和consumer端的不同配置。如前所述,很多配置都提现了某种程度的tradeoff,在使用时一定要弄清楚这些配置的真正含义,做到有的放矢。

producer端

  • batch.size
  • linger.ms
  • compression.type
  • acks
  • retries
  • max.in.flight.requests.per.connection
  • buffer.memory

Broker端

  • default.replication.factor
  • num.replica.fetchers
  • auto.create.topics.enable
  • min.insync.replicas
  • unclean.leader.election.enable
  • broker.rack
  • log.flush.interval.messages
  • log.flush.interval.ms
  • unclean.leader.election.enable
  • min.insync.replicas
  • num.recovery.threads.per.data.dir

Consumer端

  • fetch.min.bytes
  • auto.commit.enable
  • session.timeout.ms

1 调优吞吐量

Producer端

  • batch.size = 100000 - 200000(默认是16384,通常都太小了)
  • linger.ms = 10 - 100 (默认是0)
  • compression.type = lz4
  • acks = 1
  • retries = 0
  • buffer.memory:如果分区数很多则适当增加 (默认是32MB)

Consumer端

  • fetch.min.bytes = 10 ~ 100000 (默认是1)

2 调优延时

Producer端

  • linger.ms = 0
  • compression.type = none
  • acks = 1

Broker端

  • num.replica.fetchers:如果发生ISR频繁进出的情况或follower无法追上leader的情况则适当增加该值,但通常不要超过CPU核数+1

Consumer端

  • fetch.min.bytes = 1

3 调优持久性

Producer端

  • replication.factor = 3
  • acks = all
  • retries = 相对较大的值,比如5 ~ 10
  • max.in.flight.requests.per.connection = 1 (防止乱序)

Broker端

  • default.replication.factor = 3
  • auto.create.topics.enable = false
  • min.insync.replicas = 2,即设置为replication factor - 1
  • unclean.leader.election.enable = false
  • broker.rack: 如果有机架信息,则最好设置该值,保证数据在多个rack间的分布性以达到高持久化
  • log.flush.interval.messages和log.flush.interval.ms: 如果是特别重要的topic并且TPS本身也不高,则推荐设置成比较低的值,比如1

Consumer端

  • auto.commit.enable = false 自己控制位移

4 调优高可用

 

Broker端

  • unclean.leader.election.enable = true
  • min.insync.replicas = 1
  • num.recovery.threads.per.data.dir = log.dirs中配置的目录数

Consumer端

  • session.timeout.ms:尽可能地低

三、指标监控

1 操作系统级指标

  • 内存使用率
  • 磁盘占用率
  • CPU使用率
  • 打开的文件句柄数
  • 磁盘IO使用率
  • 带宽IO使用率

2 Kafka常规JMX监控

3 易发现瓶颈的JMX监控

 

4 clients端常用JMX监控 

 

5 broker端ISR相关的JMX监控 

 

 

rel:https://www.cnblogs.com/huxi2b/p/6936348.html

rel:https://www.confluent.io/blog/optimizing-apache-kafka-deployment/

分享到:
评论

相关推荐

    kafka集群部署文档(部署,运维,FAQ)

    ### Kafka集群部署与运维知识点详解 #### 一、Kafka概览 Kafka是一种高性能的分布式消息系统,具有以下特点: - **数据持久性**:Kafka通过高效的磁盘数据结构来实现消息的持久化存储,即使面对大量数据也能保持...

    Apache Kafka实战.pdf--有新特性的介绍-强烈推荐

    《Apache Kafka实战》是涵盖Apache Kafka各方面的具有实践指导意义的工具书和参考书。...第7~9章以实例的方式讲解了Kafka集群的管理、监控与调优;第10章介绍了Kafka新引入的流式处理组件。 《Apache Kafk...

    Apache Kafka

    7. ** brokers**:Kafka集群由多个服务器(brokers)组成,它们存储主题的分区,并处理来自生产者和消费者的请求。 **应用场景** 1. **日志收集**:Kafka常用于收集应用系统的日志数据,形成实时的日志流。 2. **...

    Apache Kafka.docx

    ### Apache Kafka 关键知识点详解 #### 一、Apache Kafka 概述 Apache Kafka 是一个高度可扩展、分布式的流处理平台,专为构建实时数据管道和流应用程序而设计。Kafka 能够处理高吞吐量的数据,并支持多种消息传递...

    java电子版书籍推荐-《Learning Apache Kafka》PDF.rar

    书中会详细解释这些概念,并通过实例展示如何在Java环境中设置和操作Kafka集群。 接着,书中将深入探讨Kafka的生产者和消费者API,这是Java开发者最常接触的部分。学习如何创建Java应用程序来发送和接收消息,理解...

    jiangjie qin-Auto Management for Apache Kafka and Distributed

    压缩包内的文件名为“jiangjie qin-Auto Management for Apache Kafka and Distributed Stateful System in General.pdf”,这很可能是一份详细的PDF文档,包含了关于如何自动管理Kafka集群,以及如何设计和实现...

    Apache Kafka_源码分析

    控制器是 Kafka 集群的管理节点,负责节点状态的监控、分区领导者选举以及消费组协调。当节点故障时,控制器通过 Zeekeper 进行状态变更和协调。 8. **配置与性能调优** Kafka 的性能很大程度上取决于配置参数。...

    cluster-kafka集群配置9091-9093

    本篇将深入探讨如何配置一个使用端口9091到9093的Kafka集群,并结合Zookeeper的集群配置,确保服务的稳定运行。 **Kafka集群配置** 1. **节点设置**:首先,你需要至少三个Kafka节点来构建一个基础的集群。每个...

    KafkaTool1.0.3.zip

    【Kafka Tool 1.0.3】是一个专为管理和监控Apache Kafka集群设计的强大工具,尤其适用于使用0.10及更早版本的Kafka。这个版本提供了64位的可执行程序,包括Windows(kafkatool_64bit.exe)和Mac OS X(kafkatool.dmg...

    kafka-manager-1.3.3.18

    Kafka Manager是Apache Kafka的一款管理工具,由Xiaoju Kefu公司开发并开源,它提供了可视化界面,方便用户管理和监控Kafka集群。版本1.3.3.18是这款工具的一个特定发行版,可能包含了针对之前版本的优化、修复和新...

    编译好的kafkaManager1.3.3.17

    Kafka Manager是Apache Kafka集群的一款可视化管理工具,它由Xiao Liang开发并开源,旨在帮助用户更方便地管理和监控Kafka集群。这个版本是1.3.3.17,意味着它经过了多次迭代和优化,具备了更好的稳定性和功能。 ...

    kafka-manager-2.0.0.2.zip

    而Kafka Manager是用于管理Kafka集群的一款强大工具,它提供了直观的界面,使得集群的监控、配置和操作变得更为简便。本篇文章将详细介绍Kafka Manager 2.0.0.2的特性、安装与使用方法,以及如何通过这个版本提升...

    kafka-manager 最新版本 已经编译好,可直接使用

    它提供了一个用户友好的界面,使得Kafka集群的管理和监控变得更加直观和便捷。在本压缩包中,你获得的是kafka-manager的最新版本——1.3.3.18,这个版本已经预先使用Sbt(Scala Build Tool)完成了编译,用户可以...

    kafka-manager3.0.0.4安装包(编译后)

    Kafka-Manager 是一个基于 Apache Kafka 的开源管理工具,它提供了一个用户友好的界面,方便管理员监控、管理和操作 Kafka 集群。Kafka 是一个分布式流处理平台,广泛用于大数据实时处理、消息传递等场景。Kafka-...

    Kafka_The Definitive Guide_Real-Time Data and Stream Processing at Scale

    这本书为Apache Kafka的初学者以及希望深入了解和利用Kafka的中级用户提供了实用的指南,帮助他们建立和管理生产级的Kafka集群,编写可靠的事件驱动微服务,并构建可扩展的流处理应用程序。 通过具体的实例,读者将...

    kafka-eagle-bin-2.0.5.tar.gz

    它为Kafka用户提供了一站式的监控、管理和诊断解决方案,旨在提升Kafka集群的运营效率和稳定性。在本文中,我们将深入探讨Kafka Eagle的功能特性、安装过程以及如何利用它来优化Kafka集群的管理。 1. **功能特性** ...

    kafka-eagle-bin-1.3.2.tar.gz

    Kafka Eagle,作为一款针对Apache Kafka的高效、直观的管理和监控工具,为运维人员提供了强大的功能,帮助他们更好地理解和控制Kafka集群的运行状态。本文将深入探讨Kafka Eagle 1.3.2版本的主要特性和配置步骤。 ...

    kafka-manager包

    Kafka-Manager是Apache Kafka社区的一个强大工具,专为简化Kafka集群的管理和监控而设计。这个web UI界面提供了直观且用户友好的交互方式,使得Kafka的部署、配置以及性能监控变得轻松易行。在本文中,我们将深入...

    kafka-manager-1.3.3.6 编译版本

    - **性能调优**:根据监控数据调整 Kafka 集群参数,如增加分区、调整 Replication Factor、优化 Broker 配置等。 - **报警设置**:配置告警规则,当系统状态异常时自动通知,以便及时发现和解决问题。 6. **安全...

    kafka-manager

    《Kafka-Manager:强大的Kafka集群监控利器》 在大数据处理领域,Apache Kafka作为一个分布式流处理平台,因其高效、可扩展和容错性而备受推崇。然而,随着Kafka集群规模的扩大,管理和监控变得日益复杂。这时,...

Global site tag (gtag.js) - Google Analytics