Kafka出现火花流问题:无法从具有现有数据的主题中读取数据

时间:2020-05-29 06:39:32

标签: apache-spark pyspark apache-kafka spark-streaming kafka-consumer-api

我正在尝试通过Spark Streaming向Kafka经纪人阅读,但是我遇到了一些问题。

def spark_streaming_from_STABLE_kafka_topic():
    conf = SparkConf().setMaster("spark://antonis-dell:7077").setAppName("Kafka_Spark")
    sc = SparkContext(conf=conf) 
    sc.setLogLevel("WARN")
    ssc = StreamingContext(sc, 2)

    topic = "stable_topic"
    kvs = KafkaUtils.createDirectStream(ssc,
                                    [topic],
                                    {"metadata.broker.list": "my-broker",
                                    "auto.offset.reset": "smallest"},
                                    keyDecoder=lambda x: x,
                                    valueDecoder=lambda x: x
                                    )

    lines = kvs.window(2, 2).map(lambda x: x[1])
    lines.pprint()
    return ssc


if __name__ == "__main__":
    ssc = StreamingContext.getOrCreate('/home/antonis/Desktop/tmp/checkpoint_v06', lambda: spark_streaming_from_STABLE_kafka_topic())
    ssc.start()
    ssc.awaitTermination()

除空批次外,以上代码不提取任何内容:

-------------------------------------------
Time: 2020-05-29 09:32:38
-------------------------------------------

-------------------------------------------
Time: 2020-05-29 09:32:40
-------------------------------------------

主题stable_topic包含固定大小的数据。它不会改变。 我还有另一个主题,每秒接收数据。如果我使用本主题而不是stable_topic并删除"auto.offset.reset": "smallest",则代码将获取数据。

我认为{"auto.offset.reset": "smallest"}出了点问题,但我无法解决。

现在有人在做什么我做错了吗?

1 个答案:

答案 0 :(得分:1)

在更高版本中,smallestearliest取代。确保检查使用的版本的文档。

此外,如果消费者组已经使用了主题auto.offset.reset中的某些数据,则stable_topic配置将不会生效。因此,您可以考虑在流式作业中更改group.id

如果您要分配新的group.id,请确保将auto.offset.reset设置为smalles(或在新版本中为earliest)。