如何使用Kafka生成连续编号的消息?

问题描述

上下文:发票系统,发送的发票必须有连续编号。

每张发票都有一个唯一的发票编号,为简单起见,我们假设它们是 I1I2I3 等等。因此,系统中的第一张发票的编号为 I1,并且每下一张发票都会递增。然后,每张发票都在 Kafka 主题生成

所以,总能通过这个话题的内容来算出下一张发票的数量吧? (主题中的发票数 + 1 = 下一个数字)我们可以调用这样的系统事件源。

但是你是如何做到这一点的呢?对我来说,这似乎是一个循环的数据流:为了生产到主题中,我首先需要确保我在另一个地方消费了相同的整个主题

我对事件流有什么误解,还是 Kafka 不可能?

发票总是被分配编号并一张一张地发送,而不是并行发送。

解决方法

生产者不应该关心已经(或没有)消耗了什么。

您似乎只需要确保生产者有 acks=1,这意味着代理接受了消息,并且您有一个分区来确保完整的排序。

如果您需要确保跨分布式线程/进程以原子方式增加值,那么您需要将这个数字保存在其他地方,而不是依赖于主题的状态(例如,Zookeeper 锁)。