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