【发布时间】:2020-06-26 17:41:47
【问题描述】:
融合文档here 状态
Kafka 在许多方面利用了这种二元性:例如,使您的应用程序具有弹性,支持容错状态处理,或者针对应用程序的最新处理结果运行 Kafka Streams 交互式查询。
想知道是否有更多关于在这些场景中如何使用流/表的二元性的详细信息。寻找一些简单的解释而不是一些冗长的设计文档
【问题讨论】:
标签: apache-kafka apache-kafka-streams
融合文档here 状态
Kafka 在许多方面利用了这种二元性:例如,使您的应用程序具有弹性,支持容错状态处理,或者针对应用程序的最新处理结果运行 Kafka Streams 交互式查询。
想知道是否有更多关于在这些场景中如何使用流/表的二元性的详细信息。寻找一些简单的解释而不是一些冗长的设计文档
【问题讨论】:
标签: apache-kafka apache-kafka-streams
可以将流视为日志,而表可以是给定时刻日志的快照时间。
流是数据的流,新的数据可以源源不断地到来,我们在它到来时处理它,将处理后的结果存储在一个表中以供查询。
表格的数据,会随着时间的推移而变化。在任何给定的时刻,我们都会在那个时刻获得该数据的快照。因此,表可用于执行查询和按需检索结果,而 'just' 流
并非如此例如,
video 上的用户 cmets 可以是事件的流,新的 cmets 不断出现,它们只是显示在 UI 上。此处没有可查询的内容(通常)。
但也有一些其他用例,例如..
板球更新:对于每一个新球,我们都没有。该球的跑动次数,现在我们需要将它们添加到得分中。我们当然需要存储以前的分数并用每个新球更新它。我们还需要在任何给定的时间(按需)查询分数。为了执行查询或更新分数,我们可以使用表格。
在 Kafka 上下文中,事件是一条日志消息,每条消息都是不可变的。 考虑一个更新用户信息的示例。
{user_id: 101, name: X}
{user_id: 101, name: Y}
user_id=101 的name 从X 更新为Y。当您直接对数据库执行更新并进行查询时,您只会看到name: Y,您可能没有以前的用户名,因为它被新值覆盖。
在 Kafka 中,我们有两条消息,'X' 和 'Y'。
有时,这可能很有用,甚至很关键。黑客可能已经更改了所有用户信息,而合法用户无法证明自己的身份来重新获得他的帐户。但如果有关于他的帐户的以前的信息可以作为证据,他可以重新声明。
因此,对于那些使用 Kafka 的人来说,可能会有用例将数据存储为表(或)地图,然后使用查询来检索它。
【讨论】: