[英]Spark Structred Streaming Kafka - how to read from a specific partition of topic and do offset managerment
[英]Spark + Read kafka topic from a specific offset based on timestamp
如何设置spark
作业以根据timestamp
从specific 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 的示例代码从所有分区获取消息,这些分区介于通过startingTimestamp
和endingTimestamp
指定的 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.