为了账号安全,请及时绑定邮箱和手机立即绑定

当从不同主题中具有相同键的主题加载 GlobalKTable 时会发生什么?

当从不同主题中具有相同键的主题加载 GlobalKTable 时会发生什么?

慕桂英4014372 2022-11-30 14:34:13
我们有一个只有一个分区的压缩主题,我们向它添加了一个新分区。我们没有对现有数据进行重新分区——这意味着在添加新分区之前加载的事件仍在分区中0。正如预期的那样,新事件根据标准策略存储:具有相同键的所有事件都存储在同一分区中。我们目前遇到这样的情况:Partition    Offset    Timestamp      Key         Value0            586       1545388284240  COD_ISIN    AAA1            983       1551800369978  COD_ISIN    BBB1            1141      1556526044144  COD_ISIN    CCC当我在 a 中加载此主题时GlobalKTable,商店中的值为AAA。我们显然希望拥有CCC当前价值。GlobalKTable<String, JsonNode> storeDatacatalog = builder.globalTable(TOPIC, consumed,  Materialized.as(STORE_DATACATALOG));KStream<String, JsonNode> inEvent = builder.stream(OTHER_TOPIC, consumed);inEvent = inEvent.transform(    new TransformerSupplier<String, JsonNode, KeyValue<String, JsonNode>>() {        @Override        public Transformer<String, JsonNode, KeyValue<String, JsonNode>> get() {            return new Transformer<String, JsonNode, KeyValue<String, JsonNode>>() {                private ProcessorContext context;                private KeyValueStore<String, JsonNode> dataCatalogueState;                @Override                public void init(ProcessorContext context) {                    this.context = context;                    this.dataCatalogueState = (KeyValueStore<String, JsonNode>) context.getStateStore(STORE_DATACATALOG);                    LOGGER.debug("Content of dataCatalogueState: ");                    KeyValueIterator<String, JsonNode> allDc = this.dataCatalogueState.all();                    JsonNode valueForIsin = null;            };        }    })如何GlobalKTable建立它的状态?它是基于Offset还是基于Timestamp? 它是否在内部将密钥粘贴到找到密钥的第一个分区?我知道如何解决(清除主题并再次填充 - 将应用分区策略)。但我很好奇它在内部是如何工作的。
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

GlobalKTable假设数据按键分区。因此,如果您在不同分区中有具有相同键的记录,则无法保证将应用哪个订单记录。仅保证每个分区的顺序。除此之外,atm,更新仅基于分区内的偏移量。

使用上面的示例,订单可以是

  • AAA、BBB、CCC

  • BBB、AAA、CCC

  • BBB、CCC、AAA

只能保证,BBB 将在 CCC 之前应用。


查看完整回答
反对 回复 2022-11-30
  • 1 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信