python - Spark Structured Streaming中如何保证相关事件一起处理?
问题描述
我有一个用例,我需要从 kafka 中的主题读取事件并在 Spark 中处理它们。我需要处理与同一元素相关的事件(在事件消息中指定元素标识符)并且在一个时间范围内一起发生。
如果相关事件分布在 kafka 分区中,那么考虑到 spark 的多个执行器架构,我们如何一起读取所有相关事件?
是否可以强制所有相关事件都转到 kafka 中的同一个分区?spark结构化流将如何利用它?
解决方案
1.如果你想以并行形式接收数据,那么你应该使用相同的主题创建多个接收器并使用你的streamingContext将它们联合起来,这样你就可以并行接收数据。
注意事项::
- 执行者的数量至少应等于接收者的数量
- 设置每个 executor 的核心数,以便 executor 在运行接收器所需的容量之外有一些备用容量
- 内核总数必须大于接收器数量;否则应用程序将无法处理它收到的数据
我不太了解 kafka,但我是在 MQTT 中完成的。
如果你想知道我是怎么做到的,请告诉我
在斯卡拉::
val streams = (0 to 3).map{i => KafkaUtils.createStream(......)}
val uniStream = streamingContext.union(streams)