Kafka 初学者。
我想让 python 生产者首先发送几条 A 类型的消息 (json),然后发送 B 类型的消息。java 消费者必须使用它们来保持此顺序以更新数据库。
我的第一个想法是使用单个主题来保证消息的顺序。我读了这些答案:
然而,在 Kafka 中,将一个主题用于不同的对象类型似乎不是一个好的做法?
所以另一个更“kafkaesque”的解决方案是针对这个问题有两个主题。但是有没有办法让生产者在发送第二个主题之前确保第一个主题中的所有消息都已被消费?我会失去异步性吗?
在您看来,这种配置的最佳策略是什么?
谢谢。
请您参考如下方法:
顺序不会跨多个主题或多个分区保留,因此您需要将所有消息发送到一个主题和该主题中的一个分区。
不要担心将不同的数据类型发送到同一主题,除非您使用 Avro 或其他一些序列化程序,这些序列化程序会为每个主题强制执行一致的模式。如果您要发送 JSON,那么单个主题就可以了。
重要的是要注意,顺序不会跨主题的多个分区保留。如果您的主题只有一个分区,那么您就可以了。如果您的主题有多个分区,那么您应该在发布时使用一个 key ,并对所有需要保持有序的消息使用相同的 key 。这将确保它们都进入同一个分区。
如果您真的想确保顺序得到保留,您应该设置 max.in.flight.requests.per.connection=1。否则,一条消息的错误和重试可能会使它与其他正在发送的消息的顺序不一致。
