Spring integration 为什么即使有消息,卡夫卡消费者也会被阻止到超时?

Spring integration 为什么即使有消息,卡夫卡消费者也会被阻止到超时?,spring-integration,apache-kafka,Spring Integration,Apache Kafka,我正在使用kafka的高级客户端(遗留代码) 然而,我观察到,即使有许多关于该主题的消息可用,消费者仍然被阻止,直到zk连接超时时间过去 这是为什么?我如何解决这一问题?我感兴趣-是否找到消息?再往前走 <int-kafka:zookeeper-connect id="zookeeperConnect" zk-connect="#{kafkaConfig['zooKeeperUrl']}" zk-connection-timeout="5000" zk-session-ti

我正在使用kafka的高级客户端(遗留代码)

然而,我观察到,即使有许多关于该主题的消息可用,消费者仍然被阻止,直到zk连接超时时间过去

这是为什么?我如何解决这一问题?我感兴趣-是否找到消息?再往前走

<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">

好吧,当您使用多个主题、配置时,当每个
KafkaStream
被阻止并涉及到相同的顺序迭代过程时,这是高级使用者实现的一个已知问题

有关更多信息,请参阅

更新

consumer timeout
KafkaStream
中的
ConsumerIterator
中正好表示这一点:

currentDataChunk = (FetchedDataChunk)this.channel().poll((long)this.consumerTimeoutMs, TimeUnit.MILLISECONDS);
其中,
频道
只是
阻塞队列
。我认为这并不奇怪为什么我们在消费者超时的
消息检索期间被阻止


请从“其他”中,找到
上的
最大消息数
选项。默认为
1

非常感谢您的回答。我对这个话题很陌生。假设我有一条消息,通常会在5秒钟内被读取。如果我将连接超时设置为2秒,那么实际读取的消息少于一条,会发生什么?连接超时是否只是“检查是否有消息的时间”或“检查是否有消息并在相同时间范围内读取该消息的时间”?非常感谢您我尝试了一个主题,它做了以下工作:处理消息并等待消费者超时完成,只有在消费者阅读新消息之后。e、 g.消费者超时=5秒;处理时间=1秒-在获取新消息之前将等待4秒。您是否可以告诉我,如果收集了最大数量的消息,那么请不要再等待了?时间似乎来自等待所有流(分区)成为消息。不确定您为什么需要这样的功能,但是您可以简单地最小化
超时
,并在那里等待一小段时间。无论如何,
是可轮询的,因此在不同的轮询之间有一段时间,我们可能会在那里等待,这并不奇怪。