Java 按顺序向卡夫卡发送不同消息类型的良好实践
卡夫卡的初学者 我想让python生产者先发送几条类型为a的消息(json),然后再发送类型为B的消息。java使用者必须按照这个顺序使用这些消息,以便更新数据库 我的第一个想法是使用单个主题来保证消息的顺序。我读了这些答案:Java 按顺序向卡夫卡发送不同消息类型的良好实践,java,python,architecture,apache-kafka,Java,Python,Architecture,Apache Kafka,卡夫卡的初学者 我想让python生产者先发送几条类型为a的消息(json),然后再发送类型为B的消息。java使用者必须按照这个顺序使用这些消息,以便更新数据库 我的第一个想法是使用单个主题来保证消息的顺序。我读了这些答案: 然而,在卡夫卡中,对不同的对象类型使用一个主题似乎不是一个好的做法 因此,另一个更“卡夫卡式”的解决方案是对这个问题有两个主题。但是,有没有办法让制作人在发送第二个主题之前确保第一个主题中的所有消息都已被使用?我会失去异步性吗 在您看来,这种配置的最佳策略是什么
谢谢。多个主题或多个分区之间不保留顺序,因此您需要将所有消息发送到一个主题和该主题内的一个分区 不要担心向同一主题发送不同的数据类型,除非您使用的是Avro或其他序列化程序强制每个主题使用一致的模式。如果您发送的是JSON,那么一个主题就可以了 需要注意的是,一个主题的多个分区之间并没有保持顺序。如果您的主题只有一个分区,那么您就可以了。如果您的主题有多个分区,那么您应该在发布时使用一个键,并对需要保持有序的所有消息使用相同的键。这将确保它们都去同一个分区
如果您真的想确保订单被保留,您应该设置
max.in.flight.requests.per.connection=1
。否则,一条消息的错误和重试可能会使其与其他飞行中消息的顺序不符。是否必须在A之后读取B的所有事件,或者可以在A的某些事件之后读取B的某些通风口?谢谢您的问题@marvel308。理想情况下,B的所有事件都在A的所有事件之后。谢谢你的回答。我已经为Java/Spring使用者的值反序列化程序选择了JsonDeserializer。我将有效负载包装在一个包含“类型”的对象中,以了解如何将值转换为接收器中的良好对象类型。顺序仅在分区中维护。第一句话让它有点混乱。为了减少混乱而修改