Kafka Streams 2.5.0 需要输入主题
Kafka Streams 2.5.0 requires input topic
从 Kafka Streams 2.5.0 开始,拓扑似乎必须包含输入主题。在 Kafka 2.4.1(及更早版本)中情况并非如此。
我有一个应用程序,其中拓扑仅创建一些全局状态存储,这些存储从其他应用程序写入的主题中读取数据。
使用 Kafka 2.5.0 我得到这个错误:
13:24:27.161 [<redacted>-7cf1b5c9-4a6e-4bf2-9f77-f7f85f2df3bb-StreamThread-1] ERROR o.a.k.s.p.internals.StreamThread - stream-thread [<redacted>-7cf1b5c9-4a6e-4bf2-9f77-f7f85f2df3bb-StreamThread-1] Encountered the following error during processing:
java.lang.IllegalStateException: Consumer is not subscribed to any topics or assigned any partitions
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1228)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1216)
at org.apache.kafka.streams.processor.internals.StreamThread.pollRequests(StreamThread.java:853)
at org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:753)
at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:697)
at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:670)
如果我添加一个虚拟输入主题(例如通过 streamsBuilder.stream(Pattern.compile("hack"));
),应用程序可以正常启动。
这种行为是预料之中的还是 Kafka Streams 2.5.0 中的无意更改?
更多细节:上面的用例可能看起来有点奇怪,我不得不同意。这样做的最初原因是交互式查询的一个缺点,即应用程序在一段时间内无法回答查询。我看到该问题已通过 KIP-535 在 Kafka Streans 2.5.0 中得到修复,这很好。希望以后再研究智商
private void subscribeConsumer() {
if (builder.usesPatternSubscription()) {
// this is old behaviour - is there a config that will revert to this??
consumer.subscribe(builder.sourceTopicPattern(), rebalanceListener);
} else {
consumer.subscribe(builder.sourceTopicCollection(), rebalanceListener);
}
}
观察到相同。
查看 StreamThread.java 中的变化。
这是由以下人员介绍的:
https://issues.apache.org/jira/browse/KAFKA-7317
https://github.com/apache/kafka/pull/7969/
肯定有一个配置设置可以保持 2.5.0 之前的行为(即订阅 consumer.subscribe(builder.sourceTopicPattern(), rebalanceListener))??
查看片段...
如果您的拓扑中没有任何非全局部分,则根本没有理由拥有任何 StreamThread。这意味着您只需将 num.threads
设置为零即可轻松解决此问题——可以说,无论如何您都应该这样做以避免不必要的开销和团队协调。当检测到仅全局拓扑时,默认情况下将此设置为零 "fix",因此您无需等待
当我们切换(返回)使用 collection subscription. A fix 刚刚合并时,2.5.0 引入了回归,因此您应该在发布时升级到 2.5.1 或 2.6。
从 Kafka Streams 2.5.0 开始,拓扑似乎必须包含输入主题。在 Kafka 2.4.1(及更早版本)中情况并非如此。
我有一个应用程序,其中拓扑仅创建一些全局状态存储,这些存储从其他应用程序写入的主题中读取数据。
使用 Kafka 2.5.0 我得到这个错误:
13:24:27.161 [<redacted>-7cf1b5c9-4a6e-4bf2-9f77-f7f85f2df3bb-StreamThread-1] ERROR o.a.k.s.p.internals.StreamThread - stream-thread [<redacted>-7cf1b5c9-4a6e-4bf2-9f77-f7f85f2df3bb-StreamThread-1] Encountered the following error during processing:
java.lang.IllegalStateException: Consumer is not subscribed to any topics or assigned any partitions
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1228)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1216)
at org.apache.kafka.streams.processor.internals.StreamThread.pollRequests(StreamThread.java:853)
at org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:753)
at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:697)
at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:670)
如果我添加一个虚拟输入主题(例如通过 streamsBuilder.stream(Pattern.compile("hack"));
),应用程序可以正常启动。
这种行为是预料之中的还是 Kafka Streams 2.5.0 中的无意更改?
更多细节:上面的用例可能看起来有点奇怪,我不得不同意。这样做的最初原因是交互式查询的一个缺点,即应用程序在一段时间内无法回答查询。我看到该问题已通过 KIP-535 在 Kafka Streans 2.5.0 中得到修复,这很好。希望以后再研究智商
private void subscribeConsumer() {
if (builder.usesPatternSubscription()) {
// this is old behaviour - is there a config that will revert to this??
consumer.subscribe(builder.sourceTopicPattern(), rebalanceListener);
} else {
consumer.subscribe(builder.sourceTopicCollection(), rebalanceListener);
}
}
观察到相同。 查看 StreamThread.java 中的变化。 这是由以下人员介绍的: https://issues.apache.org/jira/browse/KAFKA-7317
https://github.com/apache/kafka/pull/7969/
肯定有一个配置设置可以保持 2.5.0 之前的行为(即订阅 consumer.subscribe(builder.sourceTopicPattern(), rebalanceListener))??
查看片段...
如果您的拓扑中没有任何非全局部分,则根本没有理由拥有任何 StreamThread。这意味着您只需将 num.threads
设置为零即可轻松解决此问题——可以说,无论如何您都应该这样做以避免不必要的开销和团队协调。当检测到仅全局拓扑时,默认情况下将此设置为零 "fix",因此您无需等待
当我们切换(返回)使用 collection subscription. A fix 刚刚合并时,2.5.0 引入了回归,因此您应该在发布时升级到 2.5.1 或 2.6。