我正在使用kafka的高级客户端(遗留代码)。
但是,我观察到即使主题上有很多可用消息,消费者仍然会被阻止,直到zk-connection-timeout时间过去。
为什么会这样,我该如何解决这个问题?我感兴趣 - 是否有消息?进一步。
<int-kafka:zookeeper-connect id="zookeeperConnect"
zk-connect="#{kafkaConfig['zooKeeperUrl']}" zk-connection-timeout="5000"
zk-session-timeout="5000" zk-sync-time="2000" />
<int-kafka:consumer-context id="consumerContext" consumer-timeout="5000" zookeeper-connect="zookeeperConnect">
答案 0 :(得分:0)
嗯,当您使用多个主题,配置时,每个KafkaStream
被阻止并参与相同的顺序迭代过程时,这是高级消费者实现的一个已知问题。
有关详细信息,请参阅Slow consumer throuput when using 2 consumer-configuration。
<强>更新强>
consumer-timeout
在ConsumerIterator
的{{1}}中意味着这一点:
KafkaStream
其中currentDataChunk = (FetchedDataChunk)this.channel().poll((long)this.consumerTimeoutMs, TimeUnit.MILLISECONDS);
只是channel
。我想毫不奇怪,为什么我们在BlockingQueue
的消息检索过程中被阻止。
请从其他人那里找到consumer-timeout
上的max-messages
选项。默认情况下为<int-kafka:consumer-configuration>
。