我正在尝试整合Spark/Kafka来构建一个流媒体应用程序。Kakfa版本: 0.9火花: 1.6.2
如何处理RDD批处理数据后的偏移量。
你能给我更多关于如何处理补偿的见解吗?
火花是否内置了自动存储和读取偏移量?或者我需要引导火花去阅读一些商店的补偿,比如芒果或甲骨文?
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 -> {发布于 2016-09-28 22:10:18
问题的答案取决于您想要的消息传递语义:
首先,我建议阅读那些幻灯片和这篇博客文章。
我假设你只追求一次,因为剩下的很容易搞清楚。总之,有几种方法需要考虑:
检查点
火花流允许您检查您的DStreams。如果您使用来自KafkaUtils的直接流,那么也会对偏移进行检查。流作业在检查点之间的任何地方都可能失败,因此一些消息可能会被重放。要用这种方法精确地实现一次语义,就必须使用幂等输出操作(换句话说,下游系统能够区分/忽略重放消息)。
Pros:容易实现;从盒子里出来
Cons:至少有一次语义;检查点在代码更改后失效;偏移被存储在火花中,而不是存储在动物园管理员中
事务性数据存储
您可能希望自己将偏移存储在支持事务的自定义数据存储中,即像MySQL这样的关系数据库。在这种情况下,您需要确保处理流和保存偏移量包含在单个事务中。
Pros:精确一次语义
Cons:更难设置,需要一个事务性数据存储
基于WAL的接收机
您可以使用基于WAL的老式卡夫卡连接器。
Pros:也可以与其他数据源一起工作;在Cons中存储偏移量:它依赖于HDFS;您不能直接访问偏移量;它使并行性更难实现。
总之,这取决于您的需求--也许您可以取消一些限制来简化这个问题。
发布于 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
https://stackoverflow.com/questions/39755677
复制相似问题