代码之家  ›  专栏  ›  技术社区  ›  Val Bonn

是否可以将不完整的事件合并为ktable?

  •  0
  • Val Bonn  · 技术社区  · 6 年前

    我想知道KTable是否能满足我们的需要。

    假设我有一个主题 myTopic 在包含事件的kafka中,我在这个主题上插入了一个kafkastreams应用程序。

    我们假设当时 t0 , the 我的主题 包含3个事件:

    "key_1": { "col_1": "val_k1_c1_@t0", "col_2": "val_k1_c2_@t0"}
    "key_2": { "col_1": "val_k2_c1_@t0", "col_2": "val_k2_c2_@t0"}
    "key_3": { "col_1": "val_k3_c1_@t0", "col_3": "val_k3_c3_@t0"}
    

    当时 t1 ,与相关的新事件 key_1 被推入 我的主题 :

    "key_1": {"col_1": "NEWVAL_k1_c1_@t1", "col_2": "NEWVAL_k1_c2_@t1"}
    

    所以当时 T1 ,ktable可以这样表示:

    KEY         COL_1               COL_2               COL_3
    
    key_1       NEWVAL_k1_c1_@t1    NEWVAL_k1_c2_@t1
    key_2       val_k2_c1_@t0       val_k2_c2_@t0
    key_3       val_k3_c1_@t0                           val_k3_c3_@t0
    

    这是ktable的关键概念:保留给定键的最新值。

    现在假设当时 t2 ,一个新的事件到来,为了丰富 密钥1 :

    "key_1": { "col_3": "val_k1_c3_@t2" }
    

    如果我的理解正确,ktable将失去 col_1 col_2 ,表格将如下所示:

    KEY         COL_1               COL_2               COL_3
    
    key_1                                               val_k1_c3_@t2
    key_2       val_k2_c1_@t0       val_k2_c2_@t0
    key_3       val_k3_c1_@t0                           val_k3_c3_@t0
    

    我理解这个概念了吗?

    是否有一种本地方法来合并这些值,使ktable看起来像这样?

    KEY         COL_1               COL_2               COL_3
    
    key_1       NEWVAL_k1_c1_@t1    NEWVAL_k1_c2_@t1    val_k1_c3_@t2
    key_2       val_k2_c1_@t0       val_k2_c2_@t0
    key_3       val_k3_c1_@t0                           val_k3_c3_@t0
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Matthias J. Sax    6 年前

    你的理解是正确的。注意,这是 KTable 将每个记录视为更新整行的“完整”记录。因此,概念上, "key_1": { "col_3": "val_k1_c3_@t2" } 在解释为 col_1: null col_2: null .

    但是,您可以将主题作为ktable直接阅读,而不是将其作为ktable直接阅读。 KStream 然后做一个 aggregation() . 这允许您更新结果 KTABLE 因此。