首页 > 解决方案 > Spark Structured Streaming中如何保证相关事件一起处理?

问题描述

我有一个用例,我需要从 kafka 中的主题读取事件并在 Spark 中处理它们。我需要处理与同一元素相关的事件(在事件消息中指定元素标识符)并且在一个时间范围内一起发生。

  1. 如果相关事件分布在 kafka 分区中,那么考虑到 spark 的多个执行器架构,我们如何一起读取所有相关事件?

  2. 是否可以强制所有相关事件都转到 kafka 中的同一个分区?spark结构化流将如何利用它?

标签: pythonapache-sparkpysparkapache-kafka

解决方案


1.如果你想以并行形式接收数据,那么你应该使用相同的主题创建多个接收器并使用你的streamingContext将它们联合起来,这样你就可以并行接收数据。

注意事项::

  1. 执行者的数量至少应等于接收者的数量
  2. 设置每个 executor 的核心数,以便 executor 在运行接收器所需的容量之外有一些备用容量
  3. 内核总数必须大于接收器数量;否则应用程序将无法处理它收到的数据

我不太了解 kafka,但我是在 MQTT 中完成的。

如果你想知道我是怎么做到的,请告诉我

在斯卡拉::

 val streams = (0 to 3).map{i => KafkaUtils.createStream(......)}
 val uniStream = streamingContext.union(streams)

推荐阅读