网络和IO线程配置优化

配置参数

  • num.network.threads:Broker处理消息的最大线程数
  • num.io.threads:Broker处理磁盘IO的线程数

优化建议

  • 一般num.network.threads主要处理网络io,读写缓冲区数据,基本没有io等待,配置线程数量为cpu核数加1
  • num.io.threads主要进行磁盘io操作,高峰期可能有些io等待,因此配置需要大些。配置线程数量为cpu核数2倍,最大不超过3倍.

消息时间戳设置

log.message.timestamp.type=LogAppendTime 消息头部的时间戳设置成broker重写为日志append的时间

日志保留策略配置

当kafka server的被写入海量消息后,会生成很多数据文件,且占用大量磁盘空间,如果不及时清理,可能磁盘空间不够用,kafka默认是保留7天。

优化建议

  • 减少日志保留时间,建议三天或则更多时间。log.retention.hours=72
  • 段文件配置1GB,有利于快速回收磁盘空间,重启kafka加载也会加快(如果文件过小,则文件数量比较多,kafka启动时是单线程扫描目录(log.dir)下所有数据文件),文件较多时性能会稍微降低。log.segment.bytes=1073741824

log数据文件刷盘策略

为了大幅度提高producer写入吞吐量,需要定期批量写文件

优化建议

  • 每当producer写入10000条消息时,刷数据到磁盘。log.flush.interval.messages=10000
  • 每间隔1秒钟时间,刷数据到磁盘。log.flush.interval.ms=1000

replica复制配置

每个follow从leader拉取消息进行同步数据,follow同步性能由这几个参数决定:

  • num.replica.fetchers:拉取线程数
  • replica.fetch.min.bytes:拉取最小字节数
  • replica.fetch.min.bytes:拉取最大字节数
  • replica.fetch.wait.max.ms:最大等待时间

优化建议

  • num.replica.fetchers 配置多可以提高follower的I/O并发度,单位时间内leader持有更多请求,相应负载会增大,需要根据机器硬件资源做权衡
  • replica.fetch.min.bytes=1 默认配置为1字节,否则读取消息不及时
  • replica.fetch.max.bytes= 5 1024 1024 默认为1MB,这个值太小,5MB为宜,根据业务情况调整
  • replica.fetch.wait.max.ms follow拉取频率,频率过高,会导致cpu飙升,因为leader无数据同步,leader会积压大量无效请求情况

配置jmx服务

kafka server中默认是不启动jmx端口的,需要用户自己配置,修改方式是修改kafka-run-class.sh文件,在文件的最前面添加一行JMX_PORT=8868

事务最大超时时间

如果kafka会给flink使用,且会用到kafka事务,则建议将此参数配置的稍微大一些(如果不使用事务则无需修改)
设置kafka最大事务超时时间(2小时)
transaction.max.timeout.ms = 7200000

kafka 问题表现以及对应优化

生产者正常生产,消费者消费有规律的出现明显延时, 查看jmx 监控,看到ISR 变化过大,follower 拉取延时过高, 速率过慢。可调整 num.replica.fetchers 参数。


kafka 消息体大小限制问题

https://cloud.tencent.com/developer/article/1513858

message.max.bytes=15728640
replica.fetch.max.bytes=15728640

  1. 修改对应topic 的 最大消息字节
    ./bin/kafka-configs.sh --zookeeper xx --entity-type topics --entity-name topicname --alter --add-config max.message.bytes=2097152
  2. 修改producer 配置
    max_request_size = 2097152
    batch_size = 2097152
  3. 大小关系
    max_request_size [producer] < max.message.bytes [topic] < message.max.bytes [broker] < replica.fetch.max.bytes [broker]

kafka offset 单点故障问题

在新版本Kafka中,__consumer_offsets这个topic是存放消费者偏移量的,但是该主题默认配置副本数量只有3,容易造成单点故障,我们可以动态修改(无需重启服务)副本因子,提高kafka的可靠性

  1. offsets.topic.replication.factor 控制消费者偏移量的副本数量,默认应该是3,可修改;

关于topic, 以及leader 迁移的命令

  1. /bin/kafka-reassign-partitions.sh
  2. /kafka-preferred-replica-election.sh

zed2015
15 声望2 粉丝