我找到的大多数信息都与主键联接有关。我知道外键连接是Kafka Streams的一个相对较新的功能。我对这将如何扩大很感兴趣。我知道Kafka Streams的并行性是由每个主题上的分区数量来限制的,但我对增加输入主题分区意味着什么有一些疑问。
- 外键联接是否具有相同的对输入主题进行共分区的要求?也就是说,这两个主题需要具有相同数量的分区吗
- 应用程序在生产中运行数月或数年后,如何添加分区?支持每个KTable的变更日志主题存储来自某些输入主题分区的数据。如果要增加输入主题中的分区,这将如何影响KTables的状态存储和变更日志?据推测,我们不能重新开始并丢失这些数据,因为这些数据已经积累了数月甚至数年,对执行联接至关重要。它可能不会很快被上游数据所取代。我们是否需要销毁状态存储,创建新的输入主题,并将所有KTable变更日志主题数据重新发送给它们
- 另一个内部";订阅";主题
外键联接对共分区输入主题有相同的要求吗?也就是说,这两个主题需要具有相同数量的分区吗?
否。有关更多详细信息,请查看https://www.confluent.io/blog/data-enrichment-with-kafka-streams-foreign-key-joins/
应用程序在生产中运行数月或数年后,如何添加分区?
即使不使用Kafka Streams,也无法真正做到这一点。问题是,输入数据是按键分区的,如果添加分区,输入主题中的分区就会中断。——推荐的模式是创建一个具有不同分区数的新主题。
支持每个KTable的变更日志主题存储来自特定输入主题分区的数据。如果要增加输入主题中的分区,这将如何影响KTables的状态存储和变更日志?
这会破坏应用程序。事实上,如果Kafka Streams检测到输入主题分区的数量与changelog主题分区的数目不匹配,它将进行检查并引发异常。