Kafka - 生产调优手册


一、硬件配置选择

1.1 峰值计算

1.2 购买多少服务器

1.3 磁盘选择

1.4 内存选择

kafka的内存 = 堆内存(kafka内部配置)+ 页内存(服务器内存)

如果生产环境数据量很大,可以设置为10G-15G

查看kafka GC情况

YGC,年轻代GC次数,这里是36次可以接受

查看堆内存的使用情况

这里能看到总量是2G,使用了19.45%

1.5 CPU选择

注意:kafka这三个线程比较重要,消耗线程较多。但还有其他很多别的线程。

假设你买了32核心CPU,一般要预留给这三个线程24个,留给其他任务8个。

那么图里的数字就要按比例改改了:

num.io.thread = 24 * 50% = 12

其他的以此类推

1.6 网络选择

注意:通常说的百兆带宽单位是bit, 换算成字节MB也就12.5M/s

因此要选择千兆带宽。

二、生产者调优

2.1 kafka生产者核心参数配置

【生产者全流程图】

核心参数包括:

max.in.flight.requests.per.connection 要和 enable.idempotence幂等性 搭配使用,能解决【生产者全流程图】中 sender线程部分 到 kafka集群 这中间的乱序问题。

如果不开启幂等性,max.in.flight.requests.per.connection就只能设置为1了。

2.2 生产者如何提高吞吐量

2.3 数据可靠性

2.4 数据去重

只开启幂等性,只能保证单分区单会话内去重;

想要完全去重,需要加上“事务”

2.5 数据有序

2.6 数据乱序

三、Broker调优

3.1 Broker更新模式介绍

  • read-only: broker重启后才能生效
  • per-broker: 动态生效(对每一个broker),无需重启
  • cluster-wide:整个集群范围的动态生效

3.2 Broker核心参数配置

【kafka broker整体工作流程图】

 

3.3 服役新节点/退役旧节点

3.4 增加分区

3.5 增加副本因子

不能通过命令行添加,只能通过json文件增加

3.6 手动调整分区副本存储

3.7 leader partition 负载平衡

3.8 自动创建主题