用于DB字段更新的Kafka / Connect / Streams

时间:2018-05-28 10:25:51

标签: apache-kafka kafka-consumer-api apache-kafka-streams apache-kafka-connect

我的问题如下:

我有2个卡夫卡主题:

  • customer-purchase:包含有关客户购买的信息,其中的字段指示状态等于NEW
  • purchase-status:包含更新购买最新状态的事件,例如IN TRANSITDELIVERED ...

使用kafka,kafka connect和/或kafka流,我想最终得到一个SQL数据库,其中包含丰富了最新状态信息的购买。

在数据库世界中,这将导致简单的UPDATE查询。

理论上,我可以为customer-purchase编写1个消费者(或1个连接接收器),其中所有内容都被简单地转储到数据库和1 purchase-status的消费者,这将触发数据库{{1}查询,但我想知道是否有更像kafka的方式来做到这一点。

注意:使用kafka-streams并加入这两个主题对我来说似乎有点矫枉过正,因为我实际上并不需要加入,只需要简单更新一个字段。但在这个假设中我可能完全错了!

1 个答案:

答案 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数据库中进行丰富的步骤,其中包含最新的状态信息"?这实际上是一个连接操作(见上文)。