文章内容收录到个人网站,方便阅读:hardyfish.top/
资料分享
Kafka权威指南 (中文 高清完整 带书签)
- 资料链接:url81.ctfile.com/f/57345181-...
- 访问密码:3899
Kafka 消费者消费消息慢(10 多分钟),会对 Kafka 产生以下影响:
1. 分区滞后(Lag 增大)
影响:
- 消费者消费速率低于生产速率时,
consumer lag
(积压消息数)会持续增加。 - 若消费积压过大,可能导致磁盘占用增加,甚至影响生产者写入性能。
- 查看 Lag:
css
kafka-consumer-groups.sh --bootstrap-server <broker> --group <consumer-group> --describe
关注 LAG
值,若持续增加,说明消费跟不上。
2. 触发 Rebalance,影响吞吐
影响:
- 组内消费者处理慢,可能会触发 Rebalance,导致消费暂停、吞吐下降。
- 心跳超时 (
session.timeout.ms
默认 45s),如果超过,Kafka 认为消费者失效,会触发 Rebalance,导致组内所有消费者重新分配分区,进一步影响消费速率。
优化:
- 增加
max.poll.interval.ms
(默认 5 分钟),例如:
ini
max.poll.interval.ms=900000 # 15 分钟
让 Kafka 允许更长时间的消费,避免超时被踢出。
3. 可能触发数据过期或丢失
影响:
- 如果消费速度长期跟不上,Kafka 可能因
log.retention.ms
(默认 168 小时,即 7 天)删除未消费的数据,导致消息丢失。 - 查看 Topic 配置:
css
kafka-topics.sh --bootstrap-server <broker> --describe --topic <your-topic>
关注 retention.ms
和 log.segment.bytes
配置。
优化:
-
增加
log.retention.ms
:inilog.retention.ms=604800000 # 7 天
- 若消息积压严重,可以适当调大,确保数据不会被提前删除。
4. 影响 Kafka 端的磁盘和内存
影响:
- 磁盘占用 :消费者消费慢,Kafka Broker 需要存储更多未消费的消息,导致磁盘压力大,甚至可能触发磁盘溢满。
- 页面缓存(Page Cache)失效:Kafka 依赖 OS Page Cache 提升读取性能,若消息长期积压,数据可能被 Page Cache 淘汰,读取效率降低。
优化:
- 扩展 Kafka 存储(增加磁盘或调整存储策略)。
- 优化消费逻辑,避免长时间阻塞。
5. 生产端可能受到影响
影响:
- 如果生产速率过高,而消费跟不上,Kafka 可能因磁盘写满 而导致生产者写入失败。
- 生产端会收到
kafka.common.errors.ProducerBlockedException
或kafka.common.errors.TimeoutException
错误。
优化:
- 调整生产速率 ,确保消费端跟得上(可通过
acks=1
或batch.size
控制)。 - 增加消费端并发度,优化消费逻辑。
优化建议
-
增加消费者实例数:
- 如果是 单消费者多分区 ,增加
consumer-group
内的实例数,让多个消费者并行处理不同分区的数据。 - 示例:
- 如果是 单消费者多分区 ,增加
css
kafka-consumer-groups.sh --bootstrap-server <broker> --group <consumer-group> --describe
若 CURRENT-OFFSET
和 LAG
持续增加,说明需要扩容。
-
优化消费逻辑:
-
减少单条消息处理时间:
- 避免复杂计算、数据库阻塞(如使用批量插入)。
- 使用异步处理 (如
CompletableFuture
)。
-
调大
fetch.min.bytes
(减少网络请求):inifetch.min.bytes=1048576 # 1MB
-
调大
fetch.max.wait.ms
(减少轮询压力):inifetch.max.wait.ms=500 # 500ms
-
-
调整 Kafka 配置:
-
增大
log.retention.ms
,避免消息过期丢失:csskafka-configs.sh --alter --entity-type topics --entity-name <topic> --add-config retention.ms=604800000
-
提高
max.poll.records
(一次拉取更多消息) :inimax.poll.records=500
-
总结
Kafka 消费慢的影响:
- 积压增加(Lag 增大),可能导致磁盘压力和数据丢失。
- Rebalance 频繁,影响吞吐。
- 生产端可能受影响,导致写入失败。
- 影响 Kafka 服务器的磁盘、内存。
优化方向:
- 增加消费并发(扩展消费者实例)。
- 优化消费逻辑(减少单条消息处理时间)。
- 调整 Kafka 配置 (增加
max.poll.interval.ms
、优化fetch.min.bytes
等)。