我正在尝试使用kafka connect将ksql查询(窗口表)的结果存储到数据库中。
我现在想做的是(使用kafka jdbc connect)将它们存储在数据库中,但是行被更新(因为kafka表当前正在更新值),而不仅仅是消息流;
因此,尽管消息将是这样的:
1558042958867 | User_9 : Window{start=1558042920000 end=-} | User_9 | 20
1558042961348 | User_9 : Window{start=1558042920000 end=-} | User_9 | 21
1558042962141 | User_9 : Window{start=1558042920000 end=-} | User_9 | 22
1558042965552 | User_9 : Window{start=1558042920000 end=-} | User_9 | 23
1558042968275 | User_9 : Window{start=1558042920000 end=-} | User_9 | 24
1558042969668 | User_9 : Window{start=1558042920000 end=-} | User_9 | 25
1558042973915 | User_9 : Window{start=1558042920000 end=-} | User_9 | 26
1558042976235 | User_9 : Window{start=1558042920000 end=-} | User_9 | 27
1558042980197 | User_9 : Window{start=1558042980000 end=-} | User_9 | 1
1558042980635 | User_9 : Window{start=1558042980000 end=-} | User_9 | 2
1558042982969 | User_9 : Window{start=1558042980000 end=-} | User_9 | 3
1558042983511 | User_9 : Window{start=1558042980000 end=-} | User_9 | 4
1558042986352 | User_9 : Window{start=1558042980000 end=-} | User_9 | 5
1558042986863 | User_9 : Window{start=1558042980000 end=-} | User_9 | 6
1558042988328 | User_9 : Window{start=1558042980000 end=-} | User_9 | 7
1558042988863 | User_9 : Window{start=1558042980000 end=-} | User_9 | 8
在数据库中,我只想拥有
User_9 : Window{start=1558042920000 end=-} | User_9 | 27
User_9 : Window{start=1558042980000 end=-} | User_9 | 8
类似这样的事情。 在ksql / kafka-connect周围有什么魔术可以让我做到这一点?
为澄清起见-最后一个字段是该总计,用于计算窗口时间到目前为止x发生了多少次。
我以为我可以将window start + key作为数据库密钥并对其进行更新,但是我不确定如何在KSQL中实现。也许使用Kafka Streams可以做到吗?
@编辑:
好,所以我设法通过将这些属性添加到接收器配置中来做到这一点:
pk.mode=record_key
pk.fields=rowkey
insert.mode=upsert
现在行已更新,但窗口数据有些混乱,看起来像这样:
TOTAL USERID rowkey
32 User_9 User_9j�
31 User_9 User_9jı�`
22 User_9 User_9jIJ��
1 User_9 User_9jij�
所以窗口在那里,但是二进制编码?不知道那里发生了什么。 我仍然需要以某种可读的格式获取日期
答案 0 :(得分:0)
好的,找到了解决方案。 因此,首先,我需要在查询中创建window_start / window_end字段,如下所示:
SELECT [...], WINDOWSTART() AS window_start, WINDOWEND() AS window_end, [...]
此后,我不得不添加这些参数以使其沉没:
pk.mode=record_value
pk.fields=[...],WINDOW_START
insert.mode=upsert
可行。