Storm - 同一台机器的字段分组?
Storm - fields grouping for same machine?
- 我用
fields grouping
和storm。
- 问题是,因为我有多台机器和多个螺栓(很明显),所以
tuple
在机器之间移动,我怀疑这会大大降低我的性能。
- 是否可以将特定字段分组结果特定于特定机器?
- 或在字段分组的更多细节中
account1
对所有螺栓保持粘性 machine1
对于 account2
machine3
对于 account3
对所有螺栓保持粘性到 machine1
等等,每个 account
的所有螺栓 运行 都在特定的一台机器上?
- 请注意,一旦第一个
bolt
处理了事件,它就会在其输出元组中发出 accountid
从那一点开始的所有进一步 bolts
和 accountid
意味着我会想从那一点开始 field grouping
并在 accountid
上做 topology
中的进一步 bolts
。 (在看到第一个答案后添加澄清)
假设您有 3 个生产者 P1、P2、P3 和三个消费者 C1、C2、C3 和 3 台机器,每台机器都托管一个生产者-消费者对,即 P1-C1。此外,假设您有 3 个不同的键值 a,b,c
。此外,假设 C1 处理所有具有键 a
.
的元组
通常,所有三个生产者都可以发出键为 a
的元组。此外,P1 也可以发出带有键 b
或 c
的元组。因此,您不能使用字段分组将数据传输限制到本地机器,您需要重新分区所有数据。
分机
如果您有额外的螺栓 B1 到 B3,它们使用从 C1 到 C3 的数据,并且这些螺栓使用与 C1 到 C3 相同的字段分组键(即,Bx 可以利用 Cx 中已经给定的分区),您将需要确保 B1 到 B3 与 C1 到 C3 位于同一台机器上并避免重新分区。可以通过向 Storm 提供自定义调度程序来实现协同定位。示例见此处:https://xumingming.sinaapp.com/885/twitter-storm-how-to-develop-a-pluggable-scheduler/
但是,您不能使用字段分组来连接 B1->C1 等,因为字段分组对于运算符共置和已经给定的分区数据是不可知的(它只会再次重新分区该数据)。相反,您需要使用直接分组或自定义分组来确保将来自 B1 的所有数据发送到 C1 等。
localOrShuffleGrouping 有帮助吗?
https://github.com/apache/storm/blob/a4f9f8bc5b4ca85de487a0a868e519ddcb94e852/storm-core/src/jvm/org/apache/storm/topology/TopologyBuilder.java#L360
- 我用
fields grouping
和storm。 - 问题是,因为我有多台机器和多个螺栓(很明显),所以
tuple
在机器之间移动,我怀疑这会大大降低我的性能。 - 是否可以将特定字段分组结果特定于特定机器?
- 或在字段分组的更多细节中
account1
对所有螺栓保持粘性machine1
对于account2
machine3
对于account3
对所有螺栓保持粘性到machine1
等等,每个account
的所有螺栓 运行 都在特定的一台机器上? - 请注意,一旦第一个
bolt
处理了事件,它就会在其输出元组中发出accountid
从那一点开始的所有进一步bolts
和accountid
意味着我会想从那一点开始field grouping
并在accountid
上做topology
中的进一步bolts
。 (在看到第一个答案后添加澄清)
假设您有 3 个生产者 P1、P2、P3 和三个消费者 C1、C2、C3 和 3 台机器,每台机器都托管一个生产者-消费者对,即 P1-C1。此外,假设您有 3 个不同的键值 a,b,c
。此外,假设 C1 处理所有具有键 a
.
通常,所有三个生产者都可以发出键为 a
的元组。此外,P1 也可以发出带有键 b
或 c
的元组。因此,您不能使用字段分组将数据传输限制到本地机器,您需要重新分区所有数据。
分机
如果您有额外的螺栓 B1 到 B3,它们使用从 C1 到 C3 的数据,并且这些螺栓使用与 C1 到 C3 相同的字段分组键(即,Bx 可以利用 Cx 中已经给定的分区),您将需要确保 B1 到 B3 与 C1 到 C3 位于同一台机器上并避免重新分区。可以通过向 Storm 提供自定义调度程序来实现协同定位。示例见此处:https://xumingming.sinaapp.com/885/twitter-storm-how-to-develop-a-pluggable-scheduler/
但是,您不能使用字段分组来连接 B1->C1 等,因为字段分组对于运算符共置和已经给定的分区数据是不可知的(它只会再次重新分区该数据)。相反,您需要使用直接分组或自定义分组来确保将来自 B1 的所有数据发送到 C1 等。
localOrShuffleGrouping 有帮助吗? https://github.com/apache/storm/blob/a4f9f8bc5b4ca85de487a0a868e519ddcb94e852/storm-core/src/jvm/org/apache/storm/topology/TopologyBuilder.java#L360