簡體   English   中英

卡夫卡:Scala 到 Python 轉換

[英]Kafka: Scala to Python conversion

參考: https://spark.apache.org/docs/2.2.0/streaming-kafka-0-10-integration.html#consumerstrategies

這個例子有 python 版本嗎? 參考只有 java 等效。 我在https://kafka-python.readthedocs.io/en/master/apidoc/KafkaProducer.html發現了一些相似之處。

我可以將 bootstrap.servers 與 bootstrap_servers 匹配,將 key.serializer 與 key_serializer 匹配,將 value.serializer 與 value_serializer 匹配,但我無法匹配最后 3 個“group.id”、“auto.offset.reset”和“enable.auto”。犯罪”。

import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.streaming.kafka010._
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe

val kafkaParams = Map[String, Object](
  "bootstrap.servers" -> "localhost:9092,anotherhost:9092",
  "key.deserializer" -> classOf[StringDeserializer],
  "value.deserializer" -> classOf[StringDeserializer],
  "group.id" -> "use_a_separate_group_id_for_each_stream",
  "auto.offset.reset" -> "latest",
  "enable.auto.commit" -> (false: java.lang.Boolean)
)

val topics = Array("topicA", "topicB")
val stream = KafkaUtils.createDirectStream[String, String](
  streamingContext,
  PreferConsistent,
  Subscribe[String, String](topics, kafkaParams)
)

stream.map(record => (record.key, record.value))

您正在查看的 Scala 代碼適用於消費者。 所以你需要檢查消費者設置而不是生產者的設置。

如果您查看https://kafka-python.readthedocs.io/en/master/apidoc/KafkaConsumer.html ,您可以找到它們的等價物:

  • group.id : group_id
  • auto.offset.reset : auto_offset_reset
  • enable.auto.commit : enable_auto_commit

另請注意,消費者具有反序列化器而不是序列化器,因此:

  • key.deserializer : key_deserializer
  • value.deserializer : value_deserializer

我在https://kafka-python.readthedocs.io發現了一些相似之處

不過,這不是 Spark 代碼。 Spark 需要 Java Kafka API 的屬性。

spark-streaming-kafka-0-10在 Python 中不可用,但是如果你想使用 Spark,這是 0.8 API, 其中有 ZA7F5F35426B92742111FC9231B56 示例

from pyspark.streaming.kafka import KafkaUtils

# ssc = <get a StreamingContext>
directKafkaStream = KafkaUtils.createDirectStream(ssc, [topic], {"metadata.broker.list": brokers})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM