如何处理Apache Storm拓扑中的DML操作

时间:2015-06-18 13:05:20

标签: solr apache-storm

在我的架构中,DML命令排队到Kafka。风暴拓扑包括单个Spout和3个Solr螺栓。 DML命令分布在这3个螺栓中。

我的问题是如何处理命令的顺序由Solr Bolts洗牌。例如,命令序列是

  1. 插入值为50的记录A.
  2. 插入值为x的记录B.
  3. 将记录A更新为值20。
  4. 插入值为y的记录C.
  5. 将记录A更新为值100。 等等。
  6. 在上面的例子中,如果命令5在命令3被其他Bolt执行之前由Bolt执行怎么办?如果Bolt 3在Bolt 2执行命令3之前首先选择并执行第5个命令,则会发生这种情况。

1 个答案:

答案 0 :(得分:0)

如果我理解你是正确的,你有单个喷口(使用dop = 1)和一个螺栓(使用dop = 3)通过随机分组从喷口获取数据。如果依赖命令被混洗到不同的bolt-executors,则无法以正确的顺序执行。

但是,如果您有一系列相互依赖的命令,则可以使用fieldsGrouping来确保所有命令都转到同一个执行程序。对于这种情况,保证订单保留。要实现此目的,您只需向spout输出元组(计数器)添加一个属性,并在此属性上添加field-group。此外,对于连续的从属命令,您不需要修改计数器。如果完成了一系列相关命令,则将计数器增加1(这确保不同的命令序列由不同的螺栓执行器处理,即负载平衡)。棘手的部分是知道,当一系列相关命令完成时,我猜。希望这会有所帮助。