【问题标题】:In Spark Structured streaming with Kafka, how spark manages offset for multiple topics在使用 Kafka 的 Spark 结构化流中,Spark 如何管理多个主题的偏移量
【发布时间】:2021-03-18 10:57:43
【问题描述】:

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

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

我一直在学习 KafkaMicroBatchStream 课程,但无法了解不同主题的 get 偏移量。

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

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

【问题讨论】:

  • 那么,您使用的是哪种偏移存储设置?
  • @OneCricketeer 只是想了解,在多个主题的情况下,偏移量如何由 Spark-Kafka 集成管理。
  • 嗯,这将取决于您是否将偏移量存储在检查点中、返回到 Kafka、Zookeeper 或其他地方,但总的来说(或 Kafka 如何独立完成)是每个主题 -为整个消费者组存储分区

标签: scala apache-spark apache-kafka apache-spark-sql spark-structured-streaming


【解决方案1】:

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

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

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

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

  • 文件来源
  • 卡夫卡源
  • 套接字源(用于测试)
  • 费率来源(用于测试)

【讨论】:

    猜你喜欢
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2018-09-28
    • 2021-01-15
    • 2018-09-22
    • 2018-11-23
    相关资源
    最近更新 更多