Apache kafka KTables在启动时如何与卡夫卡互动?

Apache kafka KTables在启动时如何与卡夫卡互动?,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我对这在概念上是如何工作的有点困惑 kafka streams如何保证从kafka代理分配给它的分区与为其他主题分配的分区相匹配?似乎需要进行一些协调? 此外,卡夫卡流总是从一开始就读取压缩主题,还是从最新偏移量读取?一旦它从压缩的主题中读取消息,它是否提交偏移量 kafka streams如何保证分配给它的分区 从kafka代理匹配分配给其他主题的分区 Kafka streams应用程序在类似于Kafka客户端中的group.id的application.id下订阅一个或多个主题 当客户端请求

我对这在概念上是如何工作的有点困惑

kafka streams如何保证从kafka代理分配给它的分区与为其他主题分配的分区相匹配?似乎需要进行一些协调? 此外,卡夫卡流总是从一开始就读取压缩主题,还是从最新偏移量读取?一旦它从压缩的主题中读取消息,它是否提交偏移量

kafka streams如何保证分配给它的分区 从kafka代理匹配分配给其他主题的分区

Kafka streams应用程序在类似于Kafka客户端中的
group.id
application.id
下订阅一个或多个主题

当客户端请求Kafka broker订阅具有特定
group.id
的主题时,它将返回该主题的一组分区。 如果将所有主题分区分配给同一
应用程序.id
下的任何streams实例,将触发重新平衡,新启动的streams实例将收到其分区份额,而旧实例将不再侦听这些分区

卡夫卡总是从一开始就阅读压缩的主题吗, 还是从最新偏移量读取

无论是压缩还是其他方式,Kafka都会将应用程序从上次提交的偏移量中读取的数据流化

一旦它从压缩的主题中读取消息,它是否提交 补偿

从合同中可以看出

Kafka Streams定期提交当前处理进度 间隔(参数commit.interval.ms)。如果触发了提交, 所有状态存储都需要将数据刷新到磁盘,即所有内部主题 需要冲向卡夫卡。此外,所有用户主题都会 我也脸红了。最后,所有当前主题偏移都会提交到 卡夫卡。如果出现故障并重新启动,应用程序可以恢复 从最后一个提交点开始处理(至少提供一次 处理保证)


在编写Kafka streams应用程序时,开发人员无需手动提交偏移量,因为它是由Kafka streams在内部完成的。

关于分区,我的想法是,为了让Kafka streams支持分区环境中的联接,它需要为每个主题获得相同的分区(为了执行连接等)。也就是说,它需要知道它将获得相同的键值来连接。我想知道这方面的规则是什么?关于偏移量,如果您的客户端应用程序被拆除并重新创建,会发生什么情况?也就是说,没有备份数据?我只能假设,在这种情况下,它需要使用新的组ID才能从客户端获取数据开始?@Darren是的,如果要加入的两个主题的分区数相同,那么将为加入选择相同的分区,即topicA的分区0和topicB的分区0被分配到同一实例。您还需要确保分区逻辑也相同,因此两个主题的分区0都包含同一套钥匙