更新密钥后加入 Kafka - 缩放
Kafka join after rekey - Scaling
我有多余的应用程序需要消耗两个流(假设主题 foo 和 bar)并对 bar.value 当 foo.key 匹配 bar.value.matching_key.我希望该操作只执行一次。
我想要 confirmations/insights 这些:
- 看来joined topics需要copartition。但是,我们不是 bar 主题的所有者。如何确保 rekey table 与 foo 主题具有相同数量的分区?我的假设是我们需要同一个应用程序来使用 bar 并在另一个流中使用密钥匹配 foo.
重新输入它
- 假设主题 bar-byfookey 中的 rekey 来自上一个问题:Kafka 如何确保分配给应用程序实例的每个分区对于两个主题都是相同的?
谢谢!
如果您使用 Streams API,如果您在代码中设置连接键,库将自动创建重新键入主题。例如:
KStream fooStream = builder.stream("foo");
KTable barTable = builder.table("bar");
fooStream.selectKey(/*set "bar" key*/).join(barTable,...);
这将被执行为:
fooStream.selectKey(/*set "bar" key*/).to("rekey-foo");
KStream rekeyFooStream = builder.stream("rekey-foo");
rekeyFooStream.join(barTable,...);
对于分区分配:Kafka Streams 不使用来自消费者的默认分区分配器,而是使用确保正确分配主题分区的自定义实现。
我有多余的应用程序需要消耗两个流(假设主题 foo 和 bar)并对 bar.value 当 foo.key 匹配 bar.value.matching_key.我希望该操作只执行一次。
我想要 confirmations/insights 这些:
- 看来joined topics需要copartition。但是,我们不是 bar 主题的所有者。如何确保 rekey table 与 foo 主题具有相同数量的分区?我的假设是我们需要同一个应用程序来使用 bar 并在另一个流中使用密钥匹配 foo. 重新输入它
- 假设主题 bar-byfookey 中的 rekey 来自上一个问题:Kafka 如何确保分配给应用程序实例的每个分区对于两个主题都是相同的?
谢谢!
如果您使用 Streams API,如果您在代码中设置连接键,库将自动创建重新键入主题。例如:
KStream fooStream = builder.stream("foo");
KTable barTable = builder.table("bar");
fooStream.selectKey(/*set "bar" key*/).join(barTable,...);
这将被执行为:
fooStream.selectKey(/*set "bar" key*/).to("rekey-foo");
KStream rekeyFooStream = builder.stream("rekey-foo");
rekeyFooStream.join(barTable,...);
对于分区分配:Kafka Streams 不使用来自消费者的默认分区分配器,而是使用确保正确分配主题分区的自定义实现。