2

我一直在做通过卡夫卡消费和生产数据的火花流工作。我用的是directDstream,所以我必须自己管理offset,我们用redis来读写offset。现在有个问题,当我启动我的客户端时,我的客户端需要从redis中获取offset,而不是kafka中存在的offset本身。如何显示我编写我的代码?现在我已经在下面编写了我的代码:

   kafka_stream = KafkaUtils.createDirectStream(
    ssc,
    topics=[config.CONSUME_TOPIC, ],
    kafkaParams={"bootstrap.servers": config.CONSUME_BROKERS,
                 "auto.offset.reset": "largest"},
    fromOffsets=read_offset_range(config.OFFSET_KEY))

但我认为 fromOffsets 是火花流客户端启动时的值(来自 redis),而不是在其运行期间。谢谢您的帮助。

4

1 回答 1

0

如果我理解正确,您需要手动设置偏移量。我就是这样做的:

from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils
from pyspark.streaming.kafka import TopicAndPartition

stream = StreamingContext(sc, 120) # 120 second window

kafkaParams = {"metadata.broker.list":"1:667,2:6667,3:6667"}
kafkaParams["auto.offset.reset"] = "smallest"
kafkaParams["enable.auto.commit"] = "false"

topic = "xyz"
topicPartion = TopicAndPartition(topic, 0)
fromOffset = {topicPartion: long(PUT NUMERIC OFFSET HERE)}

kafka_stream = KafkaUtils.createDirectStream(stream, [topic], kafkaParams, fromOffsets = fromOffset)
于 2018-04-13T10:44:08.363 回答