Multithreading 使用多个子拓扑优化Kafka Streams应用程序
我正在运行一个带有三个子拓扑的Kafka Streams应用程序。活动的阶段大致如下:Multithreading 使用多个子拓扑优化Kafka Streams应用程序,multithreading,apache-kafka,kafka-producer-api,apache-kafka-streams,Multithreading,Apache Kafka,Kafka Producer Api,Apache Kafka Streams,我正在运行一个带有三个子拓扑的Kafka Streams应用程序。活动的阶段大致如下: 流主题A 选择键并将主题A重新分区到主题B 流主题B foreach主题B到主题CProducer 流主题C 主题C至主题D 主题A、B和C都是具体化的,这意味着如果每个主题有40个分区,那么我的最大并行度是120 起初,我运行5个streams应用程序,每个应用程序有8个线程。在这种设置下,我遇到了性能不一致的问题。似乎共享同一线程的某些子拓扑比其他子拓扑更需要CPU,过了一段时间,我会遇到以下错误:组[c
流
主题A选择键
并将主题A重新分区到主题B
流
主题Bforeach
主题B到主题CProducer
流
主题C至主题D
组[consumer\u group]中的成员[client\u id]失败,将其从组中删除(kafka.coordinator.group.GroupCoordinator)
。一切都将重新平衡,这可能导致性能下降,直到下一次失败和重新平衡
我的问题如下:
topic
元数据,以将其提供给正确的任务- 您可以考虑减少<代码> Max .Poop.Reals<代码>以获得更少的记录,每一个代码> POLL()(代码)>调用,这样就减少了两次连续调用到“代码> PORE())/代码>之间的时间。
- 请注意,
并不意味着增加网络/代理通信——如果单个提取请求返回的记录多于max.poll.records
config,则数据只是缓冲在使用者中,下一个max.poll.records
将从缓冲数据中提供,从而避免代理往返poll()
max.poll.interval.ms
默认设置为Integer.max\u值,大约为25天。我没有在我的配置中设置这个,但是消费者组在25天前就被删除了。这取决于您使用的版本。您可以仔细检查日志中使用的值。re回答4:我发现这并不总是正确的(对于版本1.1)。有时我必须重新启动一个streams应用程序,让所有的线程都可以选择分区,但这可能是另一个问题。