我在Databricks的博客下面阅读
https://databricks.com/blog/2015/03/30/improvements-to-kafka-integration-of-spark-streaming.html
在解释使用带有WAl的接收器的spark kafka集成如何工作的过程时,它说
1. Kafka接收器在Spark工作人员/执行人员中不断接收Kafka数据。 这使用了高级消费者API 卡夫卡。
2.收到的数据存储在Spark的worker / executor内存以及WAL(在HDFS上复制)中。 Kafka 接收器已更新 只有在数据持续存在之后,Kafka才会抵消Zookeeper 日志。
现在我怀疑高级消费者如何更新zookeeper中的偏移量,因为高级消费者不处理偏移量,它由zookeeper处理。因此,一旦我们使用zookeeper从kafka读取消息,zookeeper就会自动更新偏移量。
答案 0 :(得分:0)
因此,当消费者从kafka中的特定主题检索数据时,消费者有责任更新zookeeper中的偏移量。因此,当您使用自定义kafka使用者时,它有一个inbuild kafka API(org.apache.kafka.clients.consumer。*会这样做),一旦您收到该特定主题的数据,它就会更新偏移量。
如果基于接收器的方法在spark中使用Kafka的高级API来更新zookeeper中的偏移量。