![](/img/trans.png)
[英]Spark Structured Streaming not restarting at Kafka offsets
[英]Simple Spark Structured Streaming equivalent of KafkaUtils.createRDD, i.e. read kafka topic to RDD by specifying offsets?
如何通过指定开始和结束偏移量将kafka主题中的数据读取到RDD?
KafkaUtils.createRDD
是
实验性的,API令人不快(它返回了一个庞大的Java ConsumerRecord
类,该类甚至无法序列化,并将其放入KafkaRDD
, KafkaRDD
重写了许多方法(例如persist)以抛出异常。
我想要的是一个像这样的简单API:
case class Message(key: String,
value: String,
offset: Long,
timestamp: Long)
def readKafka(topic: String, offsetsByPartition: Map[Int, (Long, Long)])
(config: KafkaConfig, sc: SparkContext): RDD[Message]
或类似的东西,其中key: Array[Byte]
和value: Array[Byte]
要从具有偏移量的kafka中读取内容,代码应类似于此处引用
val df =
spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("subscribe", "topic1,topic2")
.option("startingOffsets", """{"topic1":{"0":23,"1":-2},"topic2":{"0":-2}}""")
.option("endingOffsets", """{"topic1":{"0":50,"1":-1},"topic2":{"0":-1}}""")
.load()
上面的代码将读取偏移量内的可用数据,然后您可以将列转换为字符串,并转换为对象Message
。
val messageRDD: RDD[Message] =
df.select(
col("key").cast("string"),
col("value").cast("string"),
col("offset").cast("long"),
col("timestamp").cast("long")
).as[Message].rdd
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.