apachespark中的风暴状结构

8mmmxcuj  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(268)

你知道在ApacheStorm中如何将数据流传输到多个螺栓。在apachespark中有没有类似的方法?
我基本上希望有一个程序从kafka队列中读取数据,并将其输出到两个不同的程序中,然后这些程序可以用自己不同的方式处理数据。
具体来说,将有一个读卡器程序从kafka队列中读取数据并将其输出到2个程序x和y。x将处理数据以计算一种度量(在我的例子中,它将计算用户活动),而y将计算另一种度量(在我的例子中,这将是基于不同设备的检查活动)。
有人能帮我理解这在spark是怎么可能的吗?

nzk0hqpo

nzk0hqpo1#

为什么不简单地创建两个拓扑?
两种拓扑都有一个从Kafka主题中读取的喷口(是的,您可以从同一主题中读取多个拓扑;我在生产系统上运行)。请确保使用不同的喷口配置,否则kafka zookeper将看到两种拓扑相同。请看一下这里的文档。
spoutconfig是kafkanconfig的扩展,它支持带有zookeeper连接信息的附加字段,并用于控制特定于kafkaspout的行为。zkroot将用作根来存储消费者的偏移量。id应该唯一标识您的喷口。

public SpoutConfig(BrokerHosts hosts, String topic, String zkRoot, String id);

实现拓扑x中的程序x和拓扑y中的程序y。
另一个选项是两个螺栓图从同一个喷口订阅,但这不是最佳的,因为失败的元组(可能只在一个图中失败)将被重放到两个图中,如果它们只在其中一个图中失败,则事件;因此,一些kafka消息将被处理两次,使用两个分开的拓扑结构,您可以避免这种情况。

相关问题