apache-kafka - 如何确定 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)]
另外两次处决:
当没有任何线程关闭时(假设从日志中没有心跳过期),是否有任何理由更新元数据?我们如何控制这个最小重复?
解决方案
推荐阅读
- linux - 无法在 Linux 终端上的 jshell 中按 Enter
- c++ - 为什么链接器找不到绝对引用?
- javascript - 加载外部翻译文件 (jquery.i18n)
- angular - 角度路由参数返回空
- apache - 如何防止 Wappalyzer 检测 heroku 应用程序?
- java - 我无法使 length-1 的值正常工作,也无法使用简单数组更新数组
- reactjs - 类型上不存在属性“确切”
- cpu-architecture - 为什么这个问题关于主存储器的措辞是这样的?
- html - 如何制作倒角?
- blockchain - 是否可以将 Moralis 服务器与 Rinkeby 测试网集成?