KSQlDB从含初始数据的Stream创建Table无初始数据仅新增数据可见问题
解决KSQlDB创建表时未加载流中已有数据的问题
核心问题在于你设置的auto.offset.reset只对交互式查询生效,而创建持久化表的查询默认是从当前时间点开始消费数据,不会回溯流里已有的历史数据。
直接修改创建表的SQL,加上START_OFFSET='earliest'参数,强制查询从头消费流的Topic数据:
CREATE TABLE customers_by_key AS SELECT id, latest_by_offset(name) AS name, latest_by_offset(age) AS age FROM customers GROUP BY id EMIT CHANGES WITH ( kafka_topic='customers_by_key', value_format='avro', START_OFFSET='earliest' );
补充说明:
auto.offset.reset配置作用于临时的交互式查询(比如你直接执行SELECT * FROM customers;),但对CREATE ... AS SELECT这类持久化的流处理任务不生效。- 持久化任务默认使用
START_OFFSET='latest',只处理任务启动后新增的数据;指定START_OFFSET='earliest'才会让任务回溯处理Topic里已有的所有历史数据。
执行修改后的SQL后,你再查询customers_by_key表,就能看到原来流里的ID为5、7、2的记录,后续新增的记录也会正常同步到表中。
内容的提问来源于stack exchange,提问作者Noy Gafni
相关产品推荐
相关产品推荐

