【问题标题】:KSQL Steam-table Left join partially (and silently) fails to populate valuesKSQL Steam-table Left join 部分(并且静默)无法填充值
【发布时间】:2018-07-20 14:29:05
【问题描述】:

我正在加入带有表格的流。连接的结果只是部分成功。一些值被准确填充,而另一些为空。我检查以确保表和流中都存在这些值,并且用于连接的列是两者的键。

我正在使用 confluent 加载正在使用 jdbc 从 MSSQL 中的表中读取的主题。

然后我使用KSQL从相应的主题创建流和表,数据都是JSON格式的。

表中缺失数据的时间戳早于流的时间戳。

create stream casecode_contract_stream as select ct.projectid, ct.casecode, cs.isTrue from contract_stream cs left join casecode_table ct on cs.projectid = ct.projectid;    

select * from casecode_contract_stream limit 1;
1532034321292 | 706083 | null | null | true

ksql> select * from casecode_contract_stream where casecode is not null limit 1;
1532034321292 | 705147 | 705147 | data1 | true

select * from casecode_table where projectid = 705147;
1532033878462 | 705147 | 705147 | data1 

select * from casecode_table where projectid = 706083;
1532033878463 | 706083 | 706083 | data2 

select * from contract_stream where projectid = 705147;
1532034321292 | 705147 | 705147 | true

select * from contract_stream where projectid = 706083;
1532034321292 | 706083 | 706083 | true

有什么建议吗?

【问题讨论】:

    标签: apache-kafka ksqldb


    【解决方案1】:

    结果取决于(非确定性)处理顺序。这是一个已知问题,并且正在努力使处理顺序更具确定性。

    可能会在将记录添加到表端之前处理来自流端的记录。对于这种情况,当您指定左连接时,流记录将使用 NULL 连接。

    【讨论】:

    • 表数据的时间戳在流之前。您是否建议存在与时间戳不对应的单独处理时间?
    • 时间戳同步不完美 atm -- 这是一个已知问题,我们目前正在修复:issues.apache.org/jira/browse/KAFKA-3514 -- 修复 KAFKA-3514 后,将首先处理具有较小时间戳的表记录填充表格。 Atm,唯一已知的解决方法(不确定是否可以应用)是从两个空主题开始,先写入表数据,然后等待它们被处理,然后再写入流数据。当然,如果您有现有的带有数据的主题,这是不可能的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 2020-08-09
    • 1970-01-01
    相关资源
    最近更新 更多