Spark 2.4.0结构化流设置Kafka消费者group.id

时间:2019-03-26 10:52:03

标签: apache-spark security apache-kafka spark-structured-streaming

我想使用Spark结构化流从安全的Kafka中读取数据。这意味着我将需要强制使用特定的group.id。但是,如文档中所述,这是不可能的。 不过,在数据砖文档https://docs.azuredatabricks.net/spark/latest/structured-streaming/kafka.html#using-ssl中,它说是可能的。这是否仅涉及天蓝色星团?

此外,通过查看apache / spark仓库https://github.com/apache/spark/blob/master/docs/structured-streaming-kafka-integration.md的master分支的文档,我们可以了解到,打算在以后的spark版本中添加这种功能。您知道这样稳定版本的任何计划,可以用来设置该使用者group.id吗?

如果没有,Spark 2.4.0是否有任何变通办法能够设置特定的使用者组。id?

4 个答案:

答案 0 :(得分:1)

当前(v2.4.0)是不可能的。

您可以在Apache Spark项目中检查以下几行:

https://www.npmjs.com/package/redux-thunk-生成group.id

https://github.com/apache/spark/blob/v2.4.0/external/kafka-0-10-sql/src/main/scala/org/apache/spark/sql/kafka010/KafkaSourceProvider.scala#L81-在用于创建KafkaConsumer

的属性中进行设置

在主分支中,您可以找到修改内容,该修改内容可用于设置前缀或特定的 group.id

https://github.com/apache/spark/blob/v2.4.0/external/kafka-0-10-sql/src/main/scala/org/apache/spark/sql/kafka010/KafkaSourceProvider.scala#L534-基于组前缀(groupidprefix)生成group.id

https://github.com/apache/spark/blob/master/external/kafka-0-10-sql/src/main/scala/org/apache/spark/sql/kafka010/KafkaSourceProvider.scala#L83-设置先前生成的groupId(如果未在属性中传递kafka.group.id

答案 1 :(得分:1)

答案 2 :(得分:1)

自Spark 3.0.0起

根据Structured Kafka Integration Guide,您可以将ConsumerGroup作为选项kafka.group.id提供:

val df = spark
  .readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("subscribe", "topic1")
  .option("kafka.group.id", "myConsumerGroup")
  .load()

但是,Spark不会向后提交任何偏移,因此您的ConsumerGroups的偏移不会存储在Kafka的内部主题 __ consumer_offsets 中,而是存储在Spark的检查点文件中。

能够设置group.id是为了处理您的ConsumerGroup通常需要遵循的命名约定的Kafka的最新功能Authorization using Role-Based Access Control

讨论并解决了here的Spark 3.x应用程序设置kafka.group.id的完整示例。

答案 3 :(得分:0)

Structured Streaming guide似乎很明确:

  

请注意,无法设置以下 Kafka参数,而Kafka   源或接收器将引发异常:

     

group.id :Kafka源将为每个查询创建唯一的组ID   自动。

     

auto.offset.reset :设置来源选项   startingOffsets指定从何处开始。