Spark上的Kafka仅读取实时摄取

时间:2018-08-20 12:37:23

标签: apache-spark pyspark apache-kafka spark-streaming dstream

火花版本= 2.3.0

Kafka版本= 1.0.0

正在使用的代码片段:

# Kafka Enpoints
zkQuorum = '192.168.2.10:2181,192.168.2.12:2181' 
topic = 'Test_topic'

# Create a kafka Stream
kafkaStream = KafkaUtils.createStream(ssc, zkQuorum, "cyd-demo-azureactivity-streaming-consumer", {topic: 1})

当Kafka流实时运行时,我会看到火花提取数据,但是,如果我在Spark之前一个小时启动Kafka,则它将不会提取小时的数据。

这是预期的还是有办法在配置中进行设置?

使用以下代码运行代码:

sudo $SPARK_HOME/spark-submit --master local[2] --jars /home/steven/jars/elasticsearch-hadoop-6.3.2.jar,/home/steven/jars/spark-streaming-kafka-0-8-assembly_2.11-2.3.1.jar /home/steven/code/demo/test.py

1 个答案:

答案 0 :(得分:3)

如果始终需要从头开始提取数据,则需要将kafka属性“ auto.offset.reset”设置为“ earliest”。这将从一开始就提取记录。

此参数是Kafka使用者配置-http://kafka.apache.org/documentation.html#newconsumerconfigs

参考链接-https://spark.apache.org/docs/2.3.0/streaming-kafka-0-10-integration.html

createStream有多种实现。您可以使用其中可以传递kafka配置的实现。 创建Stream的示例代码-

val kafkaParams = Map(
"zookeeper.connect" -> "zookeeper1:2181",
"group.id" -> "spark-streaming-test",
"auto.offset.reset" -> "earliet"
)

val inputTopic = "input-topic"

val stream =  KafkaUtils.createStream(ssc, kafkaParams, Map(inputTopic-> 1), StorageLevel.MEMORY_ONLY_SER)