类似于Apache Spark的结构

时间:2015-09-24 07:00:47

标签: apache-spark apache-storm

您知道如何在Apache Storm中将Spout流数据传输到多个螺栓。有没有办法在Apache Spark中做类似的事情?

我基本上希望有一个程序从Kafka Queue读取数据并将其输出到2个不同的程序,然后可以用不同的方式处理它。

具体来说,会有一个读取器程序从Kafka队列中读取数据并将其输出到2个程序x和y。 x将处理数据以计算一种指标(在我的情况下,它将计算用户活动),而y将计算另一种指标(在我的情况下,这将是基于不同设备检查活动)。

有人可以帮我理解Spark中的可行性吗?

1 个答案:

答案 0 :(得分:1)

为什么不简单地创建两个拓扑?

  1. 两种拓扑都有一个来自kafka主题的鲸鱼喷射读物(是的,您可以从同一主题中读取多个拓扑;我在生产系统上运行)。 确保使用不同的spout配置,否则kafka-zookeper会将两种拓扑视为相同。请查看文档here
  2.   

    Spoutconfig是KafkaConfig的扩展,它支持带有ZooKeeper连接信息的其他字段,并用于控制特定于KafkaSpout的行为。 Zkroot将用作root来存储消费者的偏移量。 id应该唯一标识您的鲸鱼嘴。

    public SpoutConfig(BrokerHosts hosts, String topic, String zkRoot, String id);
    
    1. 在拓扑x中实现程序x,在拓扑y中实现程序y。
    2. 另一种选择是从同一个喷口订购两个螺栓图,但恕我直言这不是最佳的,因为失败的元组(可能只在一个图中失败)会如果只有一个图表失败,则重播两个图表;因此,一些kafka消息将结束处理两次,使用两个分离的拓扑结构可以避免这种情况。