繁体   English   中英

Spark +根据时间戳从特定偏移量读取kafka主题

[英]Spark + Read kafka topic from a specific offset based on timestamp

如何设置spark作业以根据timestampspecific offset中获取kafka topic 假设我需要starting 6 hours ago的 kafka 主题中获取所有数据。

卡夫卡不是那样工作的。 你看到 Kafka 就像你可以用另一个不同的参数而不是偏移量来查询的东西,此外请记住,主题可以有多个分区,所以每个分区都有不同的分区。 也许你可以使用另一个关系存储来映射带有时间戳的偏移/分区,有点冒险。 以 akka 流 kafka 消费者为例,您的每个时间戳请求都应该通过另一个主题发送以激活您的消费者(每个消费者都分配了一个或多个分区)并查询特定的偏移量、生产和合并。 使用 Spark,您可以为每个工作调整您的消费者策略,但过程应该是相同的。

另一件事是,如果您的 Kafka 恢复,您可能需要阅读整个主题来更新您的配对(时间戳/偏移量)。 所有这些听起来都有些奇怪,也许最好将您的主题存储在 Cassandra 中(例如),您可以稍后对其进行查询。

此处提供的答案似乎已过时。 与此处给出的 Spark 3.xx 的最新 API 文档一样, Structured Streaming Kafka Integration

从 Kafka 获取指定 window 之间消息的灵活方式非常少。

批处理 api 的示例代码从所有分区获取消息,这些分区介于通过startingTimestampendingTimestamp指定的 window 之间,以毫秒精度的纪元时间。

val df = spark
  .read
  .format("kafka")
  .option("kafka.bootstrap.servers", bootstrapServers)
  .option("subscribe", topic)
  .option("startingTimestamp", 1650418006000)
  .option("endingTimestamp", 1650418008000)
  .load()

Kafka 是一个只能追加的日志存储。 鉴于您知道偏移量,您可以从分区中的特定偏移量开始消费。 消耗速度非常快,您可以设计一个从smallest偏移量开始的设计,并且仅在遇到消息(可能有timestamp字段要检查)时才开始执行某些逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM