驱动程序在Spark Streaming中使用直接Kafka API查询分区偏移的频率是多少



是否针对每个批次间隔或以不同的频率查询偏移量?

当您使用术语"偏移量"时,我假设您指的是偏移量,而不是实际消息。通过查阅文档,我能够找到两个直接方法的参考文献。

第一个,来自Apache Spark Docs

这种方法不是使用接收器来接收数据,而是定期向Kafka查询每个主题+分区中的最新偏移量,并相应地定义每个批次中要处理的偏移量范围。当启动处理数据的作业时,Kafka的简单消费者API用于读取Kafka定义的偏移范围(类似于从文件系统读取文件)。

这就好像有独立的行动。偏移从Kafka中查询,然后分配给特定批次中的处理。从Kafka查询偏移量可以返回覆盖多个Spark批处理作业的偏移量。

第二篇,来自databricks 的博客文章

我们不使用接收器连续接收数据并将其存储在WAL中,而是在每个批处理间隔开始时简单地决定要消耗的偏移范围。稍后,当执行每个批的作业时,从Kafka中读取与偏移范围相对应的数据进行处理(类似于HDFS文件的读取方式)。

这使得它看起来更像是每个批处理间隔本身获取一系列要消耗的偏移量。然后,当运行实际从卡夫卡中获取这些消息时。

我从来没有使用过Apache Spark,我主要使用Apache Storm+Kafka,但由于第一个文档表明它们可以在不同的时间间隔发生,我认为它们可以在不同时间发生,博客文章只是没有提到它,因为它没有涉及技术细节。

最新更新