Apache spark Spark流式卡夫卡偏移管理

Apache spark Spark流式卡夫卡偏移管理,apache-spark,apache-kafka,spark-streaming,offset,spark-streaming-kafka,Apache Spark,Apache Kafka,Spark Streaming,Offset,Spark Streaming Kafka,我一直在做spark流媒体工作,通过卡夫卡消费和制作数据。我使用directDstream,所以我必须自己管理偏移量,我们采用redis来写入和读取偏移量。现在有一个问题,当我启动我的客户端时,我的客户端需要从redis获取偏移量,而不是kafka本身存在的偏移量。我如何编写代码?现在我已经编写了以下代码: kafka_stream = KafkaUtils.createDirectStream( ssc, topics=[config.CONSUME_TOPIC, ],

我一直在做spark流媒体工作,通过卡夫卡消费和制作数据。我使用directDstream,所以我必须自己管理偏移量,我们采用redis来写入和读取偏移量。现在有一个问题,当我启动我的客户端时,我的客户端需要从redis获取偏移量,而不是kafka本身存在的偏移量。我如何编写代码?现在我已经编写了以下代码:

   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))

但我认为FromOffset是spark streaming客户端启动时的值(来自redis),而不是在运行期间。感谢您的帮助。如果我理解正确,您需要手动设置偏移量。我就是这样做的:

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)

是的,我理解你的答案。但是,我认为参数“fromOffset”意味着在客户端重新启动时获得偏移量。那么客户端在消费时如何获得偏移量呢?从卡夫卡本身还是从fromOffset?我不确定你的意思。当你开始一个流时,它必须从某个偏移量开始,然后从那里开始,它一直持续到主题的结尾。参数“fromOffsets”的意思是:当您启动“createDirectStream”时,这意味着您不想从ZooKeeper读取偏移量,就像您使用“createStream”时一样,因此您需要自己提供它。你是在问如何在不使用ZooKeeper的情况下获得偏移量吗?顺便说一句,我想问另一个问题,如何调试python spark流,我使用“logger”输出有用的消息,但它在spark cluster中不起作用(部署模式为客户端)调试是一个问题。通常我使用jupyter来预运行我的代码,并在更友好的环境中进行测试。如果我必须在生产环境中进行调试,我会使用(相当“丑陋”)的做法,从rdd内部将日志写入SQL