Kafka基础:表和流的区别 - Edward Loveall

19-08-27 banq
              

使用Kafka Streams消费主题时, 您需要使用两种数据。一个是流stream,一个是表table。

我们来看一些数据:

下面是User数据

| key | data                       |
| --- | -------------------------- |
| 17  | name: Gail,  color: Green  |
| 201 | name: Oscar, color: Red    |
| 11  | name: Sam,   color: Purple |
| 201 | name: Oscar, color: Orange |

下面是Purchases数据

| key | data                           |
| --- | ------------------------------ |
| 384 | title: Soap,       price: $7   |
| 385 | title: TV,         price: $500 |
| 386 | title: Basketball, price: $15  |
| 387 | title: Sunglasses, price: $24  |

这些看起来像表,但不要被愚弄。他们是流。。每次为这些流生成新数据时,都会在流的末尾添加一条新记录(key附带data 每一行)。

数据大多是自我解释的,但User主题topic有两个条目,用于Oscar, 从Red颜色开始并更改为Orange。这将在以后使用。

所有数据都是流

要清楚一件事,所有Kafka主题都存储为流。不同之处在于:当我们想要使用该主题时,我们可以将其作为表或流使用。让我们来看看它们是如何不同的。

以上面的用户User主题为例。如果我们想要查看所有用户及其选择的颜色,我们只需要查看最新的每个用户颜色。我们只要看Oscar和他目前的颜色color。

这就是Kafka Streams中的KTable类型。它从主题中获取主题记录流并将其合并为唯一条目。(banq注:类似状态,将事件播放到最新状态)

当我们想要使用流时,我们会从中获取所有记录。一个很好的例子是上面的Purchase流。如果我们想看看我们赚了多少钱,我们会查看我们购买主题中的每条记录,将所有利润加起来,并获得我们的数字。

这就是Kafka Streams中的KStream类型。

表是名词,流是动词

我发现将表视为代表名词(用户,文档,航班)和流作为动词(购买,编辑,动作)是有帮助的。这是因为对于名词,我们主要想要该名词的当前状态:当前文档或当前航班。但是对于动词,我们需要看到我们如何到达目标的路径:本文档编辑的历史记录或该飞机到达目的地的路径。

资源

虽然它们略有不同,但表格有时也称为a changelog stream。事实上,一切都是流 ,KTables是对流的抽象。类似地,流有时被称为一个record stream ,并且相同的抽象可用。当你看到卡夫卡时,你可能会看到这种语言。

  • https://docs.confluent.io/current/streams/concepts.html