Kafka 典范题目与排查以及相关优化

打印 上一主题 下一主题

主题 887|帖子 887|积分 2661

Kafka 是一个高吞吐量的分布式消息体系,但在实际应用中,用户常常会碰到一些性能题目和消息堆积的题目。本文将先容 Kafka 中一些典范题目的原因和排查方法,帮助用户解决题目并优化 Kafka 集群的性能。
  一、Topic 消息发送慢,并发性能低

题目形貌:
某个或某几个 Topic 的消息并发发送性能低,具体体现为 Producer 的均匀请求耽误大,均匀生产吞吐量低。
大概原因:

  • 网络带宽不足,导致 IO 等待时间长。
  • 消息未压缩,导致网络流量超负荷。
  • 消息未批量发送或批量阈值设置不当,导致发送速率慢。
  • Topic 分区数量不足,导致 Broker 接收消息积压。
  • Broker 磁盘性能低,导致磁盘同步慢。
  • Broker 分区总量过多,导致碎片化,磁盘读写过载。
排查方法: 
1、确认网络带宽:
   检查 Producer 的均匀 IO 等待时间指标,判定 Producer 到 Broker 之间的网络带宽是否满足业务的流量要求。
  1. 在一个节点上作为服务器启动 iperf
  2. iperf -s
  3. 在另一个节点上作为客户端测试网络带宽
  4. iperf -c 192.168.10.21
复制代码
2、确认消息压缩:
   检查 Producer 的均匀压缩率指标,确保压缩率符合预期。
  1. 在 Producer 配置中启用消息压缩
  2. compression.type=gzip
复制代码
3、消息未批量发送或批量阈值设置不当
 检查 Producer 的批量发送设置 batch.size 和 linger.ms。
操作下令: 查看 Producer 设置文件或代码,确认 batch.size 和 linger.ms 设置。
优化方法: 调解 Producer 设置,增大批量发送大小和耽误时间:
  1. batch.size=32768
  2. linger.ms=10
复制代码
4、增加 Topic 分区:
使用 Kafka 提供的下令行工具查看 Topic 分区数量
  1. kafka-topics.sh --describe --topic <your_topic> --zookeeper <zookeeper_host>:2181
复制代码
优化方法增加 Topic 的分区数量以提高并发处理能力:
  1. kafka-topics.sh --alter --topic <your_topic> --partitions 10 --zookeeper <zookeeper_host>:2181
复制代码
5、检查磁盘 IO 使用率:
   确认 Broker 磁盘 IO 使用率是否在安全范围内,若使用率较高则考虑扩容 Broker 或增加 Topic 分区数。
   使用 iostat 或 dstat 下令查看磁盘 IO 使用率:
  1. iostat -x 1 10
  2. dstat -d 1
复制代码
优化方法


  • 升级磁盘为 SSD,提高磁盘性能。
  • 优化磁盘设置,确保磁盘 IO 性能最佳。
6、检查分区总量:
   查看集群的总分区数和单个 Broker 的分区数量,确保在规划的容量范围内。
  使用 Kafka 提供的下令行工具查看集群分区环境: 
  1. kafka-topics.sh --describe --zookeeper <zookeeper_host>:2181
复制代码
优化方法


  • 水平扩展 Broker,增加 Broker 数量以分散分区负载。
  • 通过增加 Broker 节点来均衡分区分布,淘汰单个 Broker 的分区数量。
二、Topic 消息堆积

题目形貌:
某个或某几个 Topic 的消息堆积持续增加,具体体现为 Group 斲丧耽误数量持续增加。
大概原因:

  • Producer 生产消息流量增大。
  • Consumer 由于业务变革导致斲丧耽误增加。
  • Consumer 数量不足。
  • Consumer 数量频繁变革,导致 Group 不断做再平衡(Rebalance)。
  • Broker 未收到 Consumer 的消息确认消息。
排查方法:
确认生产量:
   检查 Producer 的消息生产量指标,判定是否明显增加。
  确认斲丧量:
   检查 Consumer 的消息流量指标,判定是否明显降落
  检查 Consumer 数量:
   通过 Kafka Broker 提供的下令,确认 Topic 对应的 Consumer 数量与实际的 Consumer 数量是否同等。假如差别等,说明某些 Consumer 未正确毗连到 Broker,必要排查 Consumer 是否正常运行。
  1. kafka-consumer-groups.sh --describe --group your_consumer_group --bootstrap-server broker_host:9092
复制代码
观察 Consumer 变革:
   观察 Consumer 的数量是否频繁变革而触发再平衡。由于网络或其他原因,大概导致 Consumer 与 Broker 之间的毗连不稳定,Consumer 能持续斲丧消息,但 Broker 始终以为消息未确认,导致斲丧位点不变。此时大概必要确认 Consumer 与 Broker 之间的网络稳定性,乃至重启 Consumer。
  三、优化 Kafka 生产性能

优化方法:
1、增大 Producer 发送消息的批量大小(batch.size)和批量发送等待时间(linger.ms)。
  1. batch.size=32768
  2. linger.ms=10
复制代码
2、启用压缩
使用压缩算法淘汰网络带宽占用。
  1. compression.type=gzip
复制代码
3、增加分区数:
   通过增加 Topic 的分区数,提高并发写入能力。
  4、调解 Broker 设置
   优化 Broker 的磁盘设置和 IO 设置,比方调解 log.segment.bytes 和 log.retention.hours。
  四、优化 Kafka 斲丧性能

优化方法:
1、增大斲丧并发:
   增加 Consumer 数量和分区数,提升并发斲丧能力。
  2、优化斲丧逻辑:
   确保 Consumer 的业务逻辑高效,淘汰单个消息处理时间。
  3、平衡负载:
   确保 Consumer Group 的每个 Consumer 都能均匀分配到分区。
  
五、Kafka 集群扩展与维护

扩展方法:

1、水平扩展 Broker:
   增加 Broker 数量,均衡负载,提高集群容量。
  (1)安装新Broker:
   在新的服务器上安装Kafka,步调与之前的安装步调相同,确保Java已经安装。
  (2)设置新 Broker:
   编辑server.properties文件,设置新的broker.id 和log.dirs,确保 zookeeper.connect指向现有的 Zookeeper集群。
  1. broker.id=3  # 新的 Broker ID
  2. listeners=PLAINTEXT://:9092
  3. log.dirs=/data/kafka-logs
  4. zookeeper.connect=192.168.10.20:2181,192.168.10.21:2181,192.168.10.22:2181
  5. num.partitions=3
  6. default.replication.factor=3
复制代码
(3)启动新Broker
  1. sudo su - kafka
  2. /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
复制代码
 (4)重新分配分区:
使用Kafka自带的工具将现有分区重新分配到新 Broker 上。
生成当前分区副本分配:
  1. kafka-reassign-partitions.sh --zookeeper 192.168.10.20:2181 --generate --topics-to-move-json-file topics.json --broker-list "0,1,2,3"
复制代码
topics.json内容:
  1. {
  2.   "version": 1,
  3.   "topics": [
  4.     {"topic": "test-topic"}
  5.   ]
  6. }
复制代码
 执行分区重新分配:
  1. kafka-reassign-partitions.sh --zookeeper 192.168.10.20:2181 --execute --reassignment-json-file reassignment.json
复制代码
2、动态扩展 Topic:
   根据流量需求动态调解 Topic 的分区数。
   增加 Topic 的分区数量
  1. kafka-topics.sh --alter --topic test-topic --partitions 10 --zookeeper 192.168.10.20:2181
复制代码
维护方法:

定期监控:
   使用 Kafka 自带的工具或第三方监控工具(如 Prometheus + Grafana)定期监控集群状态。
  检查集群状态: 
  1. kafka-broker-api-versions.sh --bootstrap-server 192.168.10.20:9092
复制代码
检查 Topic 信息: 
  1. kafka-topics.sh --describe --topic test-topic --zookeeper 192.168.10.20:2181
复制代码
定期优化:
   定期检查并优化设置,清理过期数据,保持集群康健运行。
  优化server.properties中的设置,根据实际使用环境调解参数,如调解日记段大小和保留时间:
  1. log.segment.bytes=1073741824  # 1 GB
  2. log.retention.hours=168       # 7 days
复制代码
清理过期数据
  1. kafka-delete-records.sh --bootstrap-server 192.168.10.20:9092 --offset-json-file offsets.json
复制代码













免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表