向Kafka发送不同消息类型的良好做法

Che*_*tom 1 python java architecture apache-kafka

卡夫卡的初学者.

我希望有一个python生成器发送前几个类型为A的消息(json),然后是类型B.消费者必须使用它们来保持这个顺序以更新数据库.

我的第一个想法是使用单个主题来保证消息的顺序.我读了这些答案:

然而,在Kafka中,将一个主题用于不同的对象类型似乎不是一个好习惯吗?

因此,更多"kafkaesque"的另一个解决方案是针对此问题的两个主题.但是,在发送第二个主题之前,生产者是否有办法确保第一个主题中的所有消息都已被消耗?我会失去异步吗?

在您看来,这种配置中最好的策略是什么?

谢谢.

Han*_*sen 6

订单不会保留在多个主题或多个分区中,因此您需要将所有消息发送到该主题中的一个主题和一个分区.

除非您使用Avro或其他一些序列化程序来强制执行每个主题的一致架构,否则不要担心将不同的数据类型发送到同一主题.如果您要发送JSON,那么单个主题就可以了.

重要的是要注意,在主题的多个分区中不保留顺序.如果您的主题有一个分区,那么你没事.如果您的主题有多个分区,那么您应该在发布时使用密钥,并对需要保持有序的所有邮件使用相同的密钥.这将确保它们都进入同一个分区.

如果您想确保订单保留,您应该设置max.in.flight.requests.per.connection=1.否则,错误和重试一条消息可能会使其与其他正在进行的消息无序.