群组成员支持的协议与现有成员的协议不兼容

Tin*_*yen 7 apache-kafka apache-spark spark-streaming

我正面临与 Kafka 相关的问题。

我的当前服务 ( Producer) 将消息发送到 Kafka 主题 ( events)。该服务正在使用kafka_2.12 v1.0.0,用 Java 编写。

我正在尝试将它与spark-streaming作为Consumer服务的示例项目集成(这里使用 kafka_2.11 v0.10.0,用 Scala 编写)

消息成功发送Producer到 Kafka 主题。但是,我总是收到以下错误堆栈:

Exception in thread "main" org.apache.kafka.common.errors.InconsistentGroupProtocolException: The group member's supported protocols are incompatible with those of existing members.
    at ... run in separate thread using org.apache.spark.util.ThreadUtils ... ()
    at org.apache.spark.streaming.StreamingContext.liftedTree1$1(StreamingContext.scala:577)
    at org.apache.spark.streaming.StreamingContext.start(StreamingContext.scala:571)    at com.jj.streaming.ItemApp$.delayedEndpoint$com$jj$streaming$ItemApp$1(ItemApp.scala:72)
    at com.jj.streaming.ItemApp$delayedInit$body.apply(ItemApp.scala:12)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)     at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)   at scala.App$class.main(App.scala:76)
    at com.jj.streaming.ItemApp$.main(ItemApp.scala:12)
    at com.jj.streaming.ItemApp.main(ItemApp.scala)
Run Code Online (Sandbox Code Playgroud)

我不知道根本原因。我怎样才能解决这个问题?

小智 6

当我尝试将使用者添加到使用与之前不同的分区分配策略的集群时,在我的配置中会发生这种情况。

例如:

partition.assignment.strategy=org.apache.kafka.clients.consumer.RandomAccessAssignor
Run Code Online (Sandbox Code Playgroud)

混合或默认为:

partition.assignment.strategy=org.apache.kafka.clients.consumer.RangeAssignor
Run Code Online (Sandbox Code Playgroud)

  • 为了查明这是否也是您的问题,请使用 `kafka-consumer-groups --bootstrap-server SERVER:9092 --describe --group GROUP --state` 在结果中查找 ASSIGNMENT-STRATEGY。 (4认同)