我想使用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?
答案 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)
现在使用spark3.0,您可以为kafka https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html#kafka-specific-configurations指定group.id
答案 2 :(得分:1)
根据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指定从何处开始。