我遇到这种奇怪的行为:在应用程序滚动更新(3个节点)期间,金丝雀荚失败了,因为所有Kafka流都已消失。更有趣的是,调查显示根本原因是:
org.apache.kafka.streams.processor.internals.StreamThread -
java.lang.IllegalStateException: Consumer was assigned partitions [my-service-KSTREAM-FILTER-0000000006-repartition-0, my-service-KSTREAM-MAP-0000000002-repartition-0]
which didn't correspond to subscription request [first_topic, second_topic, third_topic]
at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.handleAssignmentMismatch(ConsumerCoordinator.java:218)
at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.onJoinComplete(ConsumerCoordinator.java:264)
at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.joinGroupIfNeeded(AbstractCoordinator.java:424)
at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureActiveGroup(AbstractCoordinator.java:358)
at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:353)
at org.apache.kafka.clients.consumer.KafkaConsumer.updateAssignmentMetadataIfNeeded(KafkaConsumer.java:1251)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1216)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1201)
at org.apache.kafka.streams.processor.internals.StreamThread.pollRequests(StreamThread.java:941)
at org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:846)
at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:805)
at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:774)
这些分区主题是运行拓扑中的现有内部主题。好的,但是为什么失败了?
此日志中还有一个线索:
INFO org.apache.kafka.clients.consumer.KafkaConsumer - [Consumer
clientId=my-service-f4d2b970-4a28-4221-b64f-5440c837203c-StreamThread-1-consumer,
groupId=my-service]
Subscribed to pattern: 'my-service-KSTREAM-FILTER-0000000012-repartition|my-service-KSTREAM-MAP-0000000011-repartition|
first_topic|second_topic|third_topic'
它表明Kafka Streams创建了不同的内部主题(不同的名称)并将其用作订阅模式。 仅当拓扑发生更改时才有可能:重新组织操作会导致内部主题重命名(如果不存在名称覆盖)。 就我而言,不存在与拓扑相关的更改。甚至还有相同的依赖项版本。
那么,在这种情况下,什么可能引起内部主题重命名?
注释: