我想在外部数据库而不是RocksDB中进行所有有状态操作,并且在需要有状态操作的地方执行该操作,我正在编写将执行数据库操作的自定义处理器,context#forward方法将键值对与数据库一起转发给数据库。下游消费者,最后写出一个主题。
答案 0 :(得分:0)
Kafka Streams仅在 Kafka主题内仅启用一次语义。
对外部系统(数据库)的写操作没有这样的保证。
可能的情况如下:
在上述情况下:
外部系统(DB)-两次获得相同的消息
在整个Kafka上仅实现一次
如果要将消息写入外部系统(DB),最好使用Kafka Connect(JDBC Sink Connector)。您可以使用Kafka Streams完全处理消息,而不是使用Kafka Connect从输出主题到数据库。
有关一次语义的更多信息,您可以找到