【发布时间】:2019-01-30 08:37:51
【问题描述】:
我对 kafka 文档中关于这个主题的措辞有点困惑,所以我想在这里问一下,我在这里对这些东西的解释是否正确?
因此,如果我正确理解这一点,扩展 Kafka Stream 应用程序的唯一方法是启动应用程序的新实例(或增加应用程序中的流线程数),这将确保在 consumerGroup( 'application.id'),所以我可以将我的流应用程序扩展到主题的分区数(实际上,如果我的流拓扑连接到多个主题,假设 TopicA 有 5 个分区,topicB 有 3 个我加入了流TopicA 和 TopicB,我猜在这种情况下我可以扩展到 3 个实例/线程)。
现在假设我有一个有 5 个分区的 topicA,我启动了我的应用程序的 3 个实例,如果我在拓扑中配置了 KTable,每个 KTable 都将包含来自某个分区的信息,我必须找出哪个实例上的元数据(分区)我的键是,所以当我启动第 4 个实例时会发生什么,假设实例 3 上的 KTable 的键/值现在可以转到实例 4 上的 KTable,不是吗?一个问题是这种重新平衡可以持续多长时间(我认为这取决于主题大小,所以假设需要 1 分钟,我正在查询 KTable 的应用程序会在此操作期间无响应吗?)
一个附带的问题,这种机制对于 'streamBuilder.table(..)' 和 'streambuilder.groupByKey(..).reduce(..)'' 的工作方式是否完全相同?
最后一个问题,同样是一个有 5 个分区的主题,但我没有启动应用程序的 3 个实例,而是启动了一个具有 3 个流线程的实例(num.stream.threads = 3),我将再次拥有代表 5 个分区的 3 个 KTable ,如果我将线程大小 3 更改为 4,它的行为是否与增加实例数完全相同?
谢谢解答..
【问题讨论】:
标签: apache-kafka apache-kafka-streams