当前位置: 代码网 > 服务器>服务器>Linux > Kafka 典型问题与排查以及相关优化

Kafka 典型问题与排查以及相关优化

2024年08月02日 Linux 我要评论
Kafka 是一个高吞吐量的分布式消息系统,但在实际应用中,用户经常会遇到一些性能问题和消息堆积的问题。本文将介绍 Kafka 中一些典型问题的原因和排查方法,帮助用户解决问题并优化 Kafka 集群的性能。

一、topic 消息发送慢,并发性能低

问题描述:

某个或某几个 topic 的消息并发发送性能低,具体表现为 producer 的平均请求延迟大,平均生产吞吐量低。

可能原因:

  1. 网络带宽不足,导致 io 等待时间长。
  2. 消息未压缩,导致网络流量超负荷。
  3. 消息未批量发送或批量阈值配置不当,导致发送速率慢。
  4. topic 分区数量不足,导致 broker 接收消息积压。
  5. broker 磁盘性能低,导致磁盘同步慢。
  6. broker 分区总量过多,导致碎片化,磁盘读写过载。

排查方法: 

1、确认网络带宽:

在一个节点上作为服务器启动 iperf
iperf -s

在另一个节点上作为客户端测试网络带宽
iperf -c 192.168.10.21

2、确认消息压缩:

在 producer 配置中启用消息压缩
compression.type=gzip

3、消息未批量发送或批量阈值配置不当

 检查 producer 的批量发送配置 batch.sizelinger.ms

操作命令: 查看 producer 配置文件或代码,确认 batch.sizelinger.ms 设置。

优化方法: 调整 producer 配置,增大批量发送大小和延迟时间:

batch.size=32768
linger.ms=10

4、增加 topic 分区:

使用 kafka 提供的命令行工具查看 topic 分区数量

kafka-topics.sh --describe --topic <your_topic> --zookeeper <zookeeper_host>:2181

优化方法增加 topic 的分区数量以提高并发处理能力:

kafka-topics.sh --alter --topic <your_topic> --partitions 10 --zookeeper <zookeeper_host>:2181

5、检查磁盘 io 使用率:

 使用 iostatdstat 命令查看磁盘 io 使用率:

iostat -x 1 10
dstat -d 1

优化方法

  • 升级磁盘为 ssd,提高磁盘性能。
  • 优化磁盘配置,确保磁盘 io 性能最佳。

6、检查分区总量:

使用 kafka 提供的命令行工具查看集群分区情况: 

kafka-topics.sh --describe --zookeeper <zookeeper_host>:2181

优化方法

  • 水平扩展 broker,增加 broker 数量以分散分区负载。
  • 通过增加 broker 节点来均衡分区分布,减少单个 broker 的分区数量。

二、topic 消息堆积

问题描述:
某个或某几个 topic 的消息堆积持续增加,具体表现为 group 消费延迟数量持续增加。

可能原因:

  1. producer 生产消息流量增大。
  2. consumer 由于业务变化导致消费延迟增加。
  3. consumer 数量不足。
  4. consumer 数量频繁变化,导致 group 不断做再平衡(rebalance)。
  5. broker 未收到 consumer 的消息确认消息。

排查方法:

确认生产量:

确认消费量:

检查 consumer 数量:

kafka-consumer-groups.sh --describe --group your_consumer_group --bootstrap-server broker_host:9092

观察 consumer 变化:

三、优化 kafka 生产性能

优化方法:

1、增大 producer 发送消息的批量大小(batch.size)和批量发送等待时间(linger.ms)。

batch.size=32768
linger.ms=10

2、启用压缩

使用压缩算法减少网络带宽占用。

compression.type=gzip

3、增加分区数:

4、调整 broker 配置

四、优化 kafka 消费性能

优化方法:

1、增大消费并发:

2、优化消费逻辑:

3、平衡负载:

五、kafka 集群扩展与维护

扩展方法:

1、水平扩展 broker:

(1)安装新broker:

(2)配置新 broker:

broker.id=3  # 新的 broker id
listeners=plaintext://:9092
log.dirs=/data/kafka-logs
zookeeper.connect=192.168.10.20:2181,192.168.10.21:2181,192.168.10.22:2181
num.partitions=3
default.replication.factor=3

(3)启动新broker

sudo su - kafka
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties

 (4)重新分配分区:

使用kafka自带的工具将现有分区重新分配到新 broker 上。

生成当前分区副本分配:

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内容:

{
  "version": 1,
  "topics": [
    {"topic": "test-topic"}
  ]
}

 执行分区重新分配:

kafka-reassign-partitions.sh --zookeeper 192.168.10.20:2181 --execute --reassignment-json-file reassignment.json

2、动态扩展 topic:

 增加 topic 的分区数量

kafka-topics.sh --alter --topic test-topic --partitions 10 --zookeeper 192.168.10.20:2181

维护方法:

定期监控:

检查集群状态: 

kafka-broker-api-versions.sh --bootstrap-server 192.168.10.20:9092

检查 topic 信息: 

kafka-topics.sh --describe --topic test-topic --zookeeper 192.168.10.20:2181

定期优化:

优化server.properties中的配置,根据实际使用情况调整参数,如调整日志段大小和保留时间:

log.segment.bytes=1073741824  # 1 gb
log.retention.hours=168       # 7 days

清理过期数据

kafka-delete-records.sh --bootstrap-server 192.168.10.20:9092 --offset-json-file offsets.json

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com