首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SparkStreaming/Kafka偏移处理

SparkStreaming/Kafka偏移处理
EN

Stack Overflow用户
提问于 2016-09-28 19:02:45
回答 2查看 1K关注 0票数 1

我正在尝试整合Spark/Kafka来构建一个流媒体应用程序。Kakfa版本: 0.9火花: 1.6.2

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

你能给我更多关于如何处理补偿的见解吗?

火花是否内置了自动存储和读取偏移量?或者我需要引导火花去阅读一些商店的补偿,比如芒果或甲骨文?

代码语言:javascript
复制
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 -> {
EN

回答 2

Stack Overflow用户

发布于 2016-09-28 22:10:18

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

  • 最多一次:每条消息最多只处理一次。
  • 至少一次:每条消息最多处理一次
  • 准确一次:最多一次,同时至少一次

首先,我建议阅读那些幻灯片这篇博客文章

我假设你只追求一次,因为剩下的很容易搞清楚。总之,有几种方法需要考虑:

检查点

火花流允许您检查您的DStreams。如果您使用来自KafkaUtils的直接流,那么也会对偏移进行检查。流作业在检查点之间的任何地方都可能失败,因此一些消息可能会被重放。要用这种方法精确地实现一次语义,就必须使用幂等输出操作(换句话说,下游系统能够区分/忽略重放消息)。

Pros:容易实现;从盒子里出来

Cons:至少有一次语义;检查点在代码更改后失效;偏移被存储在火花中,而不是存储在动物园管理员中

事务性数据存储

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

Pros:精确一次语义

Cons:更难设置,需要一个事务性数据存储

基于WAL的接收机

您可以使用基于WAL的老式卡夫卡连接器。

Pros:也可以与其他数据源一起工作;在Cons中存储偏移量:它依赖于HDFS;您不能直接访问偏移量;它使并行性更难实现。

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

票数 3
EN

Stack Overflow用户

发布于 2016-09-29 05:07:39

当您想使用Spark使用Kafka主题的数据时,有两种方法可以做到这一点。

1.基于收信机的方法,该方法在动物园管理员中管理偏移量,并自动更新动物园管理员的偏移量。了解更多信息。http://spark.apache.org/docs/latest/streaming-kafka-integration.html#approach-1-receiver-based-approach

2.直接方法(无接收者)这种方法是它不更新动物园管理员中的偏移量,因此基于动物园管理员的卡夫卡监控工具不会显示出进展。但是,您可以在每个批处理中访问此方法处理的偏移量,并自行更新。

http://spark.apache.org/docs/latest/streaming-kafka-integration.html#approach-2-direct-approach-no-receivers

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39755677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档