首页 > 解决方案 > 如何确定 Kafka Streams 的正确参数

问题描述

核心应用程序平均需要 500 毫秒来处理一条记录。

我尝试了以下模式。不幸的是,我无法摆脱重新平衡。

事件总数: 3,60,000。

Confluent平台: 3Node集群,每个2TB磁盘,SSD磁盘,Better NIC,VM。

应用程序节点详细信息:有 24 个内核,96GB 内存,运行应用程序时使用的内存为 20GB(可能其他应用程序也在消耗),400% CPU 使用率(我有 24 个内核)。

源主题详细信息: 1 个主题,10 个分区。

处理细节

在这里,实体决定事件的处理速度。

全部 - 每条记录最多 100 个实体(事件、kafka 消息),平均处理时间为 500 毫秒

20 - 每条记录最多 20 个实体(事件、kafka 消息),平均处理时间更短

我提到了很多论坛这个答案KIP 62,Confluent docs,@Matthias J.Sax 答案,这个博客

我很难设置这些值以避免重新平衡。

检测信号过期日志:

[2021-07-27 07:11:50,775] INFO [GroupCoordinator 3]: Preparing to rebalance group 
abc in state PreparingRebalance with old generation 594 (__consumer_offsets-13) 
(reason: removing member abc-990854d8- 
f8d7-4b77-9318-2542000258d2-StreamThread-1-consumer-badbdf8b-6705-4319-be8f-57a71d2366ef 
on heartbeat expiration) (kafka.coordinator.group.GroupCoordinator)

瞬间max.poll.records减少到10,没有心跳过期。但是由于元数据变化而重新平衡(?)

[2021-07-28 12:09:03,030] INFO [GroupCoordinator 3]: Preparing to rebalance group abc 
in state PreparingRebalance with old generation 10 (__consumer_offsets-13) 
(reason: Updating metadata for member 
abc-e0cb67ba-e587-44f9-844b-746cd498392a-StreamThread-1-consumer- 
e875d55d-75b5-4b0a-ad10-cc045223690d during Stable) (kafka.coordinator.group.GroupCoordinator)

让我很困惑的是心跳过期——没有网络错误,应用程序没有崩溃。为什么会出现这个错误,此时应用程序收到重复的消息[Time matches from the logs(application log, kafka log)]

另外两次处决:

最近两次处决

当没有任何线程关闭时(假设从日志中没有心跳过期),是否有任何理由更新元数据?我们如何控制这个最小重复?

标签: apache-kafkaapache-kafka-streams

解决方案


推荐阅读