我的问题如下:
我有2个卡夫卡主题:
customer-purchase
:包含有关客户购买的信息,其中的字段指示状态等于NEW
。purchase-status
:包含更新购买最新状态的事件,例如IN TRANSIT
,DELIVERED
... 使用kafka,kafka connect和/或kafka流,我想最终得到一个SQL数据库,其中包含丰富了最新状态信息的购买。
在数据库世界中,这将导致简单的UPDATE
查询。
理论上,我可以为customer-purchase
编写1个消费者(或1个连接接收器),其中所有内容都被简单地转储到数据库和1 purchase-status
的消费者,这将触发数据库{{1}查询,但我想知道是否有更像kafka的方式来做到这一点。
注意:使用kafka-streams并加入这两个主题对我来说似乎有点矫枉过正,因为我实际上并不需要加入,只需要简单更新一个字段。但在这个假设中我可能完全错了!
答案 0 :(得分:0)
从理论上讲,我可以为客户购买1个消费者(或1个连接接收器),其中所有内容都被简单地转储到数据库和1个消费者的购买状态,这将触发DB UPDATE查询,但我想知道是否有更像卡夫卡的方式来做到这一点。
这几乎就是Kafka Streams中表表连接实际上的作用。
在你的例子中,你是通过"一次一个事件处理"的镜头来看的。表表连接发送这样的"更新"与你所描述的非常相似。请参阅https://kafka.apache.org/documentation/streams/developer-guide/dsl-api.html#ktable-ktable-join处的联接语义。
注意:使用kafka-streams并加入这两个主题对我来说似乎有点矫枉过正,因为我实际上并不需要加入,只需要简单更新一个字段。但在这个假设中我可能完全错了!
你提到你考虑加入这两个主题,但决定反对它。为什么这样?这似乎是一个好主意,对我来说也是惯用的。它与DB世界的例子也没有太大的不同:你将如何在包含购买的SQL数据库中进行丰富的步骤,其中包含最新的状态信息"?这实际上是一个连接操作(见上文)。