【发布时间】:2017-03-22 14:56:14
【问题描述】:
我正在尝试从数据库更新流中生成某种具体化视图(由例如 DBMS 的事务日志提供,在例如 maxwell-daemon 的帮助下)。该视图被具体化为一个 Kafka 压缩主题。
视图是一个简单的连接,可以表示为这样的查询:
SELECT u.email user_email, t.title todo_title, t.state todo_state
FROM User u
JOIN Todo t
ON t.user_id = u.id
我希望每次 User 或 Todo 更改时更新视图(要在视图的 kafka 主题上发布消息)。
使用 Kafka Streams 似乎可以通过这样做来实现:
- 制作用户更改的 KTable
- 制作 Todo 更改的 KTable
- 同时加入
但是,我不确定一些事情:
- 这可能吗?
- 这会保持事件的原始顺序吗?例如如果 User 改变了,Todo 也改变了,我能保证在 join 的结果中看到这些改变吗?
- 如何处理交易?例如多个数据库更改可能是同一事务的一部分。如何确保两个 KTable 都是原子更新的,并且所有连接结果都只显示完全应用的事务?
【问题讨论】: