【发布时间】:2022-02-01 21:04:55
【问题描述】:
我正在开发一个使用 Kafka 作为分布式提交日志的系统。单线程 Kafka 生产者接收来自外部的请求,处理它们并将结果写入具有 4096 个分区的主题。分区的数量是根据下游消费者的需求来选择的。生产者的内部状态会随着它接收到新的请求而变化,它会不时保存状态快照。
在极少数情况下,当生产者需要恢复时,它会读取快照,然后需要按照生成消息的顺序从 Kafka 主题中读取消息。我知道这不是 Kafka 设计的工作方式。但由于这是一种特殊且罕见的情况,我想知道我是否可以一次从每个分区读取一批,在内存中对它们进行排序,然后应用于快照以最终获得最新状态?
编辑:要记住的事情。 1.所有产生的消息都带有序列号,所以我可以订购它们。 2. Producer 在设计上是单线程的。
【问题讨论】:
-
我不确定我是否理解“来自每个分区的批次”是什么意思。当然,您可以将分区分配给消费者(不是生产者)并轮询一次,然后转到下一个分区并重复...
-
@OneCricketeer 因为我想将 Kafka 用作“提交日志”,所以我需要 a) 写入它,b) 在恢复时从中读取。通常我的生产者会写,但当它恢复时,它变成了消费者。真正的问题是,是否有一种可靠的方法可以从多个分区中读取数据,并以某种方式按照生产者的顺序获取记录,假设每条记录都有一个序列。
-
所有数据已经有一个偏移序列。但是跨多个分区排序并不是 kafka 鼓励的模式。我会指出 Kafka Streams KTables 已经可以满足您的要求
标签: apache-kafka event-sourcing