gpt4 book ai didi

apache-kafka-streams - Kafka 流构建物化 View

转载 作者:行者123 更新时间:2023-12-04 08:20:41 26 4
gpt4 key购买 nike

我正在尝试从数据库更新流中生成某种物化 View (例如,在 maxwell-daemon 的帮助下,由 DBMS 的事务日志提供)。 View 被具体化为 Kafka 压缩主题。

View 是一个简单的连接,可以表示为这样的查询:

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 更改时更新 View (要在 View 的 kafka 主题上发布的消息)。

使用 Kafka Streams 似乎可以通过这样做来实现这一点:

  • 制作用户更改的 KTable
  • 制作一个 Todo 更改的 KTable
  • 加入两者

但是,我不确定一些事情:

  • 这可能吗?
  • 这会保持事件的原始顺序吗?例如如果 User 改变了,那么 Todo 也改变了,我能保证在加入的结果中看到这些改变吗?
  • 如何处理交易?例如多个数据库更改可能是同一事务的一部分。如何确保两个 KTables 都是原子更新,并且所有连接结果只显示完全应用的事务?

最佳答案

  • 这可能吗?

是的。您描述的模式将开箱即用地计算出您想要的内容。

  • 这会保持事件的原始顺序吗?例如如果 User 改变了,那么 Todo 也改变了,我能保证在加入的结果中看到这些改变吗?

Streams 会根据时间戳处理数据(即,时间戳较小的记录优先处理)。因此,通常这将按预期工作。但是,并没有严格的保证,因为在流处理中,始终取得进展(并且不要阻塞)更为重要。因此,关于按时间戳顺序处理记录,Streams 仅应用“尽力而为方法”。例如,如果一个变更日志不提供任何数据,Streams 将继续处理来自另一个变更日志的数据(而不是阻塞)。这可能会导致对来自不同分区/主题的时间戳进行“乱序”处理。

  • 如何处理交易?例如多个数据库更改可能是同一事务的一部分。如何确保两个 KTables 都是原子更新,并且所有连接结果只显示完全应用的事务?

目前这是不可能的。每个更新都将单独处理,您将看到每个中间(即未提交)结果。但是,Kafka 将来会引入“事务处理”来处理事务。 (参见 https://cwiki.apache.org/confluence/display/KAFKA/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaginghttps://cwiki.apache.org/confluence/display/KAFKA/KIP-129%3A+Streams+Exactly-Once+Semantics)

关于apache-kafka-streams - Kafka 流构建物化 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42955262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com