Aar*_*_ab 4 apache-kafka-streams kafka-streams-scala
我理解这两个之间的区别,但是,我似乎仍将其KTable用作“默认值”,而不是真正知道何时更喜欢GlobalKTable.
请分享您的经验,什么时候GlobalKTable必须使用它,为什么不使用它等。
关键是它KTable是分区的,这意味着如果您有一个包含 N 个分区的基础主题,那么处理这些分区子集的实例将有权访问这些分区上的数据,但不能访问此分区上的数据实例未管理。
但是,GlobalKTable将使用所有实例中的所有主题数据。例如,您希望将其用于与一组外部数据的连接,这些数据的分区与传入数据没有直接关联(或无法预测其关系)。
例如,假设您有一个来自users主题的流,具有默认的循环分区,具有一个country字段,您需要users使用来自用户所在国家/地区的数据来丰富该流。然后,您可以使用GlobalKTable国家/地区的数据,并加入例如国家/地区的数据users流country GlobalKTable。
由于 GlobalKTable 使您可以访问所有潜在的可连接数据,因此对于较小的数据,它比 KTable 更有效,因为您不需要为该连接重新分区数据(所有数据都在那里)。但是您应该注意大小:您必须处理每个分区中的所有数据集。这就是为什么它通常用于有限大小的数据集合,也不是超大的。
如果您在 aKStream和 a之间执行连接KTable,则需要重新分区数据(创建内部主题),以根据连接键重新分组数据。
同样,如果您使用处理器 API,如果您KTable从一个实例查询 a ,您将在那里获得由该实例生成的数据,而不是其他实例。
更新:另见@matthias-j-sax 关于同步的评论。
| 归档时间: |
|
| 查看次数: |
1401 次 |
| 最近记录: |