我正在尝试整合Spark / Kafka来构建流媒体应用。 Kakfa版本:0.9 火花:1.6.2
在RDD批处理中处理数据后如何处理偏移量。
你能否给我更多关于处理补偿的见解?
内置火花是为了自动存储和读取偏移吗?或者我是否需要引导火花来读取某些商店的偏移量,例如mongo或oracle?
Ambiguous type variable ‘a0’ arising from a use of ‘quickCheck’
prevents the constraint ‘(Show a0)’ from being solved.
Probable fix: use a type annotation to specify what ‘a0’ should be.
These potential instances exist:
instance [safe] Show Args -- Defined in ‘Test.QuickCheck.Test’
instance [safe] Show Result -- Defined in ‘Test.QuickCheck.Test’
instance (Show a, Show b) => Show (Either a b)
-- Defined in ‘Data.Either’
...plus 27 others
...plus 65 instances involving out-of-scope types
(use -fprint-potential-instances to see them all)
• In the expression: quickCheck toList_correct
In an equation for ‘main’: main = quickCheck toList_correct
答案 0 :(得分:3)
您的问题的答案取决于您所需的消息传递语义:
首先,我建议您阅读those slides以及this blog post。
我假设您正在追求一次,因为其余的很容易弄明白。无论如何,需要考虑几种方法:
Spark Streaming允许您检查您的DStreams
。如果您使用来自KafkaUtils
的直接流,则也会检查偏移量。流式传输作业可能在检查点之间的任何位置失败,因此可能会重播某些消息。要使用这种方法实现恰好一次语义,就必须使用幂等输出操作(换句话说 - 下游系统能够区分/忽略重放的消息)。
优点:轻松实现;开箱即用
缺点:至少一次语义;代码更改后检查点失效;偏移量存储在Spark中,而不是存储在Zookeeper
中您可能希望将偏移量存储在支持事务的自定义数据存储中,即像MySQL这样的关系数据库。在这种情况下,您需要确保处理流和保存偏移包含在单个事务中。
优点:完全一次语义
缺点:难以设置,需要事务数据存储
您可以使用基于WAL的旧Kafka连接器。
优点:也适用于其他数据源;在Zookeeper中存储偏移量 缺点:这取决于HDFS;你不能直接访问抵消;它使得并行性更难实现
总而言之,这一切都取决于您的要求 - 也许您可以解除一些限制来简化此问题。
答案 1 :(得分:-2)
当您想使用Spark Streaming从Kafka主题使用数据时,有两种方法可以做到这一点。
1.基于接收者的方法 在这种方法中,在Zookeeper中管理偏移量,它会自动更新zookeeper中的偏移量。欲获得更多信息。 http://spark.apache.org/docs/latest/streaming-kafka-integration.html#approach-1-receiver-based-approach
<强> 2。直接方法(无接收方) 这种方法是它不会更新Zookeeper中的偏移量,因此基于Zookeeper的Kafka监视工具不会显示进度。但是,您可以在每个批处理中访问此方法处理的偏移量,并自行更新Zookeeper。