apache-kafka - 当要连接的数据可以分配在不同的机器上时,Kafka Streams 如何执行连接?
问题描述
有两个 Kafka 主题,每个主题有两个分区。他们的消息由相同的参数 id 键入:整数。
我有两个 Kafka Streams 应用程序实例,因此每个主题都会被分配两个分区(任务)。
现在,假设来自主题 A 的消息 ids =1 的分区被分配给 KStreams 应用程序实例 A,而来自主题 B 的消息 ids =1 的分区被分配给应用程序实例 B,这两个 KStreams 的连接如何工作如果来自主题的数据可能没有被并置(就像在这个例子中发生的键/ids = 1)?
解决方案
有一些方法可以做到这一点......如果存储不是问题或消息较少的频率,那么您可以将 GlobalKtables 用于主题之一。这将花费更多内存,因为所有分区都将在 Streams 应用程序的所有实例上同步。
https://docs.confluent.io/current/streams/concepts.html#globalktable
另一种方法是使用 Kafka 流交互查询来发现其他流实例上的数据。
https://kafka.apache.org/10/documentation/streams/developer-guide/interactive-queries.html
对于 KStreams 连接 - 您需要为两个主题设置相同数量的分区以及相同的分区策略。这样,所有消费者将以相同的方式读取两个主题的分区。
很好的分区参考博客 - https://medium.com/@anyili0928/what-i-have-learned-from-kafka-partition-assignment-strategy-799fdf15d3ab
推荐阅读
- reactjs - TypeError:无法解构“未定义”的属性“数据”,因为它在 covid 跟踪器应用程序中未定义
- r - Tidyverse:如何将两个列向量绑定在一起
- powershell - Powershell:尝试更新 OU 中的所有 sAMAccountNames;最初的“如果”没有任何效果
- javascript - Ajax 表单提交不停留在页面上
- excel-formula - 在 Excel 日期范围内查找值的方法
- javascript - 如何从 JavaScript 创建 ViewBag 列表动态视图
- ios - UITextfield 无响应。嵌入警报的 UITextfield 不起作用
- c++ - 我可以调用析构函数的任何方式来破坏对象吗?c++/smfl
- sql - 如何通过在 Oracle 中添加另一个表中的值来更新特定表字段的值
- javascript - 如何从可能的属性名称列表中检索给定对象中不存在的第一个甚至所有属性名称?