Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 字段分组是否确保严格的顺序?_Apache Kafka_Apache Storm - Fatal编程技术网

Apache kafka 字段分组是否确保严格的顺序?

Apache kafka 字段分组是否确保严格的顺序?,apache-kafka,apache-storm,Apache Kafka,Apache Storm,我是ApacheStorm的初学者,我想知道在流中元组的顺序何时能得到保证。 当我得到这篇文章的权利,然后之间的顺序螺栓/喷口和其他螺栓是有保证的 所以,如果我有KaffkaSpout,它会发出元组,元组是根据时间戳排序的,并且有一些根据id进行字段分组的螺栓 builder.setBolt("Bolt1", bolt1).fieldsGrouping("Bolt1", new Fields("id")); 是否保证始终为螺栓处理id为x的元组。因此,如果Tuple1具有相同的id,那么在T

我是ApacheStorm的初学者,我想知道在流中元组的顺序何时能得到保证。 当我得到这篇文章的权利,然后之间的顺序螺栓/喷口和其他螺栓是有保证的

所以,如果我有KaffkaSpout,它会发出元组,元组是根据时间戳排序的,并且有一些根据id进行字段分组的螺栓

builder.setBolt("Bolt1", bolt1).fieldsGrouping("Bolt1", new Fields("id")); 
是否保证始终为螺栓处理id为x的元组。因此,如果Tuple1具有相同的id,那么在Tuple2在Bolt1中处理之前,必须(严格地)在Bolt1中处理Tuple1?严格来说,我的意思是不平行。

即使工作节点出现故障,情况也是如此吗?

这取决于您的拓扑以及“Bolt1”在相对于KafkaSpout的拓扑中的位置。例如,考虑以下2种拓扑情况-

案例1-

  • 建筑商设置管道(“卡夫卡斯波特”,卡夫卡斯波特)
  • builder.setBolt(“Bolt1”,Bolt1)。字段分组(“KafkaSpout”,新字段(“id”)
在这种情况下,由于bolt1在拓扑结构上是kafkaSpout的下一个,并且具有字段分组,因此具有相同“id”的所有元组都将转到相同的bolt实例,其顺序将是严格的。 但是考虑下面的拓扑< /P> 案例2-

  • 建筑商设置管道(“卡夫卡斯波特”,卡夫卡斯波特)
  • 构建器.setBolt(“Bolt2”,Bolt2).shufflegroup(“KafkaSpout”)
  • builder.setBolt(“Bolt1”,Bolt1)。字段分组(“Bolt2”,新字段(“id”)//由Bolt2发出的id字段
在本例中,由于顺序在Bolt2中丢失,因此无法保证元组将按照推入Kafka分区的顺序到达bolt1


一般来说,如果您希望在Storm system中对处理进行严格的排序,则您有责任保持所有组件正常工作并有序排放。但一般来说,这会通过限制代码和拓扑中的并行性,在许多方面限制您使用Storm的全部功能

这取决于您的拓扑结构以及“Bolt1”在相对于KafkaSpout的拓扑结构中的位置。例如,考虑以下2种拓扑情况-

案例1-

  • 建筑商设置管道(“卡夫卡斯波特”,卡夫卡斯波特)
  • builder.setBolt(“Bolt1”,Bolt1)。字段分组(“KafkaSpout”,新字段(“id”)
在这种情况下,由于bolt1在拓扑结构上是kafkaSpout的下一个,并且具有字段分组,因此具有相同“id”的所有元组都将转到相同的bolt实例,其顺序将是严格的。 但是考虑下面的拓扑< /P> 案例2-

  • 建筑商设置管道(“卡夫卡斯波特”,卡夫卡斯波特)
  • 构建器.setBolt(“Bolt2”,Bolt2).shufflegroup(“KafkaSpout”)
  • builder.setBolt(“Bolt1”,Bolt1)。字段分组(“Bolt2”,新字段(“id”)//由Bolt2发出的id字段
在本例中,由于顺序在Bolt2中丢失,因此无法保证元组将按照推入Kafka分区的顺序到达bolt1


一般来说,如果您希望在Storm system中对处理进行严格的排序,则您有责任保持所有组件正常工作并有序排放。但一般来说,这会通过限制代码和拓扑中的并行性,在许多方面限制您使用Storm的全部功能

我想象中的拓扑与Case1类似,因为如果它在这种情况下成立,那么它也会在任意拓扑中成立,其中Bold1的路径只包含带字段分组的粗体。我认为storm在这种情况下甚至是有用的。假设id标识了一个人,那么不同的人的事件仍然可以并行处理。此外,如果按顺序处理person事件并不重要,那么还可能有其他路径。是的,唯一需要注意的是,一旦分组在任何路径上被任何螺栓打断,就不可能实现后续的顺序完整性。我想象的拓扑结构与案例1类似,因为如果它在这种情况下保持不变,那么它也会在任意拓扑中保持不变,其中Bold1的路径只包含带字段分组的粗体。我认为storm在这种情况下甚至是有用的。假设id标识了一个人,那么不同的人的事件仍然可以并行处理。此外,如果按顺序处理person事件并不重要,那么还可能有其他路径。是的,唯一需要注意的是,一旦分组在任何路径上被任何螺栓打断,就不可能实现后续的顺序完整性。