我使用 Storm 解析并保存来自 Kafka 的数据。数据以某些标识符形式出现,然后是不同大小的 map< string,string> 。经过一番调整后,最终目标是卡桑德拉。
我应该将数据作为一个元组块发送还是拆分地图并分别发送每个部分?
答案 0 :(得分:1)
元组应代表流中下一个螺栓的“工作单元”。如果您将地图视为单个实体,并将其作为单个实体(尽管是复杂的对象)处理,则应将地图作为单个元组发出。如果您希望不同的螺栓独立处理不同的地图属性,那么将地图分解为随后可处理的属性子集并发出多个元组。
答案 1 :(得分:1)
这取决于您要发送的元组的大小。
您在Storm中发出的每个元组都将被视为序列化消息,从一个执行器传输到另一个执行器。您还应该考虑Netty和LMAX的性能,因为它们用于最新版本的Storm for 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了解更多详情。