【问题标题】:Details of duality of Streams and Tables in Kafka StreamsKafka Streams 中 Streams 和 Tables 的二元性细节
【发布时间】:2020-06-26 17:41:47
【问题描述】:

融合文档here 状态

Kafka 在许多方面利用了这种二元性:例如,使您的应用程序具有弹性,支持容错状态处理,或者针对应用程序的最新处理结果运行 Kafka Streams 交互式查询。

想知道是否有更多关于在这些场景中如何使用流/表的二元性的详细信息。寻找一些简单的解释而不是一些冗长的设计文档

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

    可以将流视为日志,而表可以是给定时刻日志的快照时间。

    流是数据的流,新的数据可以源源不断地到来,我们在它到来时处理它,将处理后的结果存储在一个表中以供查询。

    表格的数据,会随着时间的推移而变化。在任何给定的时刻,我们都会在那个时刻获得该数据的快照。因此,表可用于执行查询和按需检索结果,而 'just' 流

    并非如此

    例如,

    video 上的

    用户 cmets 可以是事件的,新的 cmets 不断出现,它们只是显示在 UI 上。此处没有可查询的内容(通常)。

    但也有一些其他用例,例如..

    板球更新:对于每一个新球,我们都没有。该球的跑动次数,现在我们需要将它们添加到得分中。我们当然需要存储以前的分数并用每个新球更新它。我们还需要在任何给定的时间(按需)查询分数。为了执行查询或更新分数,我们可以使用表格。


    在 Kafka 上下文中,事件是一条日志消息,每条消息都是不可变的。 考虑一个更新用户信息的示例。

    {user_id: 101, name: X}
    {user_id: 101, name: Y}
    

    user_id=101nameX 更新为Y。当您直接对数据库执行更新并进行查询时,您只会看到name: Y,您可能没有以前的用户名,因为它被新值覆盖

    在 Kafka 中,我们有两条消息,'X''Y'

    有时,这可能很有用,甚至很关键。黑客可能已经更改了所有用户信息,而合法用户无法证明自己的身份来重新获得他的帐户。但如果有关于他的帐户的以前的信息可​​以作为证据,他可以重新声明。

    因此,对于那些使用 Kafka 的人来说,可能会有用例将数据存储为表(或)地图,然后使用查询来检索它。

    【讨论】:

    • 感谢您的回答。但这似乎没有直接回答我的问题
    • @delbao 你能详细说明一下吗?
    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 2020-04-25
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2019-01-31
    相关资源
    最近更新 更多