哪些消息应该发布到 Kafka 主题,什么时候发布?
Which messages should be published to a Kafka topic, and when?
我有一些服务,比如Catalog Service
、Customer Service
、Recommendations Service
、Order Taking Service
等等...,每个服务都有自己的Keyspace
在 Cassandra
数据库中。
我有两个问题:
1 - 对于服务中的更改:我应该先将更改的事件(或记录)发布到 Kafka
,然后在其他服务中使用它来更新其数据库,还是应该更新它的数据库先发布记录到 Kafka
?
2 - 如何选择要发布到 Kafka
的更改,我是否应该将所有更新发布到 Kafka
,即使是那些对其他服务不感兴趣的更新,例如 "attribute X updated to Y for product Z"
?
1) 我建议您始终尝试阅读您的文章。哪种操作更有可能成功?来自 Kafka 的复制 ack,还是持久的 Cassandra upsert?如果你认为 Kafka 更持久,那么你会在那里写它,然后使用像 Kafka Connect 这样的工具将它写到 Cassandra(假设你真的需要 Cassandra 而不是 Global KTable,那有待商榷)
2) 没有直接的答案。如果您认为数据将永远以可能相关的方式被使用,那么就生产它。将其视为所有事件的审计日志。如果你想建立一个幂等系统,它总是知道任何产品的最新状态和发生的所有变化,那么你可以每次将整个对象存储为 (id, product) 对,在那里你整体更新整个产品,或者你可以存储更改的每个增量并从中重建状态
我有一些服务,比如Catalog Service
、Customer Service
、Recommendations Service
、Order Taking Service
等等...,每个服务都有自己的Keyspace
在 Cassandra
数据库中。
我有两个问题:
1 - 对于服务中的更改:我应该先将更改的事件(或记录)发布到 Kafka
,然后在其他服务中使用它来更新其数据库,还是应该更新它的数据库先发布记录到 Kafka
?
2 - 如何选择要发布到 Kafka
的更改,我是否应该将所有更新发布到 Kafka
,即使是那些对其他服务不感兴趣的更新,例如 "attribute X updated to Y for product Z"
?
1) 我建议您始终尝试阅读您的文章。哪种操作更有可能成功?来自 Kafka 的复制 ack,还是持久的 Cassandra upsert?如果你认为 Kafka 更持久,那么你会在那里写它,然后使用像 Kafka Connect 这样的工具将它写到 Cassandra(假设你真的需要 Cassandra 而不是 Global KTable,那有待商榷)
2) 没有直接的答案。如果您认为数据将永远以可能相关的方式被使用,那么就生产它。将其视为所有事件的审计日志。如果你想建立一个幂等系统,它总是知道任何产品的最新状态和发生的所有变化,那么你可以每次将整个对象存储为 (id, product) 对,在那里你整体更新整个产品,或者你可以存储更改的每个增量并从中重建状态