风暴数据结构 - 映射与分离值?

Storm data structures - map vs separated values?

我正在使用 Storm 解析和保存来自 Kafka 的数据。数据以一些标识符的形式出现,然后是一个大小不一的 map 。经过一番修改后,最终目标是 Cassandra。

我应该将数据作为一个元组块发送,还是拆分地图并分别发送每一块?

一个元组应该表示流中下一个螺栓的 "unit of work"。如果您将地图视为单个实体,将其作为单个(尽管很复杂)对象进行处理,那么地图应该作为单个元组发出。如果您希望不同的螺栓独立处理不同的地图属性,则将地图分解为后续可处理的属性子集并发出多个元组。

这取决于您要发送的元组的大小。

您在 Storm 中发出的每个元组都将被视为从一个执行器传输到另一个执行器的序列化消息。您还应该考虑 Netty 和 LMAX 的性能,因为它们在最新版本的 Storm 中用于 Inter-worker 通信和 Intra-worker 通信。即设置如

  • Config.TOPOLOGY_RECEIVER_BUFFER_SIZE
  • Config.TOPOLOGY_TRANSFER_BUFFER_SIZE
  • Config.TOPOLOGY_EXECUTOR_RECEIVE_BUFFER_SIZE
  • Config.TOPOLOGY_EXECUTOR_SEND_BUFFER_SIZE

应该考虑在内。您可以查看 Understanding the Internal Message Buffers of Storm 了解更多详情。