在 Spark Structured streaming with Kafka 中,spark 如何管理多个主题的偏移量

In Spark Structured streaming with Kafka, how spark manages offset for multiple topics

考虑一个从 Kafka 读取消息的 Spark Structured Streaming 作业。

如果我们定义了多个主题,代码如何管理每个主题的偏移量?

我一直在浏览 KafkaMicroBatchStream class,但无法了解 if get 对不同主题的偏移量。

def latestOffset(start: Offset, readLimit: ReadLimit): Offset;方法将 return 只有一个偏移量。

试图理解实现,因为我需要编写从多个 RDBM table 读取的自定义源,每个 table 都有自己的偏移量。偏移量将仅在 RDBMS table 中进行管理。

当结构化流作业从 Kafka 源获取数据时,偏移量通常存储在检查点文件中。在这些文件中,您将找到每个 TopicPartition 的最新处理偏移量(基于由结构化流作业创建的消费者组)。术语“TopicPartition”表示偏移量按每个分区的主题存储。

此检查点适用于作为源的 Kafka 主题,因为偏移量是唯一标识符,在消息的生命周期内永远不会改变。

从 RDBM 读取数据时,您需要跟踪流作业已使用的每一行,例如通过跟踪主键。但是,您需要考虑对已使用的行进行更新。

我认为这就是为什么有(还没有)可用的 RDBM 结构化流源的原因,如 Structured Streaming Programming Guide on Input Source:

中所述
  • 文件来源
  • Kafka 源代码
  • 套接字源(用于测试)
  • 费率来源(用于测试)