在具有相同拓扑的滚动更新过程中,Kafka Streams错误状态

时间:2020-01-17 16:23:56

标签: java apache-kafka apache-kafka-streams

我遇到这种奇怪的行为:在应用程序滚动更新(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创建了不同的内部主题(不同的名称)并将其用作订阅模式。 仅当拓扑发生更改时才有可能:重新组织操作会导致内部主题重命名(如果不存在名称覆盖)。 就我而言,不存在与拓扑相关的更改。甚至还有相同的依赖项版本。

那么,在这种情况下,什么可能引起内部主题重命名?

注释

  • kafka流lib版本= 2.3.0
  • 主题复制因子= 3
  • 主题分区= 2

0 个答案:

没有答案