gpt4 book ai didi

java - Spark Streaming/Kafka 偏移量处理

转载 作者:行者123 更新时间:2023-11-30 07:07:59 25 4
gpt4 key购买 nike

我正在尝试集成 Spark/Kafka 来构建一个流应用程序。卡卡法版本:0.9 Spark :1.6.2

在 RDD 批处理中处理数据后如何处理偏移量。

您能给我更多关于处理偏移量的见解吗?

spark 是否内置自动存储和读取偏移量?或者我是否需要引导 Spark 从 mongo 或 oracle 等商店读取偏移量?

JavaInputDStream<String> directKafkaStream = KafkaUtils.createDirectStream(jsc, String.class, String.class,
StringDecoder.class, StringDecoder.class, String.class, kafkaParams, topicMap,
(Function<MessageAndMetadata<String, String>, String>) MessageAndMetadata::message);

directKafkaStream.foreachRDD(rdd -> {

最佳答案

您问题的答案取决于您所需的消息传递语义:

  • 最多一次:每条消息最多被处理一次
  • 至少一次:每条消息最多被处理一次
  • 恰好一次:同时最多一次和至少一次

首先,我建议阅读 those slides以及this blog post .

我假设您正在追求恰好一次,因为其余的很容易弄清楚。无论如何,有几种方法需要考虑:

检查点

Spark Streaming 允许您检查 DStreams。如果您使用来自 KafkaUtils 的直接 Stream,偏移量也将被设置检查点。流作业可能会在检查点之间的任何位置失败,因此某些消息可能会重播。要使用这种方法实现“恰好一次”语义,必须使用幂等输出操作(换句话说,下游系统能够区分/忽略重播的消息)。

优点:容易实现;开箱即用

缺点:至少一次语义;代码更改后检查点失效;偏移量存储在 Spark 中,而不是在 Zookeeper 中

交易数据存储

您可能希望自己将偏移量存储在支持事务的自定义数据存储中,即像 MySQL 这样的关系数据库。在这种情况下,您需要确保处理流和保存偏移量包含在单个事务中。

优点:恰好一次语义

缺点:设置较困难,需要事务数据存储

基于 WAL 的接收器

您可以使用基于 WAL 的旧版 Kafka 连接器。

优点:也可以与其他数据源一起使用;在 Zookeeper 中存储偏移量缺点:依赖HDFS;您无法直接访问偏移量;这使得并行性更难实现

总而言之,这完全取决于您的要求 - 也许您可以取消一些限制来简化这个问题。

关于java - Spark Streaming/Kafka 偏移量处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39755677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com