您知道如何在Apache Storm中将Spout流数据传输到多个螺栓.有没有办法在Apache Spark中做类似的事情?
我基本上希望有一个程序从Kafka Queue读取数据并将其输出到2个不同的程序,然后可以用不同的方式处理它.
具体来说,将有一个读取器程序将从Kafka队列中读取数据并将其输出到2个程序x和y. x将处理数据以计算一种指标(在我的情况下,它将计算用户活动),而y将计算另一种指标(在我的情况下,这将是基于不同设备检查活动).
有人可以帮我理解Spark中的可行性吗?
最佳答案 你为什么不简单地创建两个拓扑?
>这两种拓扑都有一个来自kafka主题的鲸鱼喷射读物(是的,您可以从同一主题读取多个拓扑;我在生产系统上运行).确保使用不同的spout配置,否则kafka-zookeper会将两种拓扑视为相同.看一下文档here.
Spoutconfig is an extension of KafkaConfig that supports additional fields with ZooKeeper connection info and for controlling behavior specific to KafkaSpout. The Zkroot will be used as root to store your consumer’s offset. The id should uniquely identify your spout.
public SpoutConfig(BrokerHosts hosts, String topic, String zkRoot, String id);
>在拓扑x中实现程序x,在拓扑y中实现程序y.
另一种选择是从同一个喷口订购两个螺栓图,但恕我直言这不是最优的,因为失败的元组(可能只在一个图中失败)将被重放到两个图中,如果它们只在一个图中失败则发生图表;因此,一些kafka消息将结束处理两次,使用两个分离的拓扑结构可以避免这种情况.