正在探索反应式 kafka,只是想确认反应式 kafka 是否等同于同步生产者。通过同步生产者,我们获得了带有 ACK all 的消息传递保证,并保持了生产者序列。但是,ASYNC不能保证交付和排序。反应式生产者等同于 SYNC 还是 ASYNC?
反应式表示异步。在普通的Kafka客户端API中,KafkaProducer
也是异步的。当您显式调用阻止程序执行的kafkaProducer.send().get()
时,它将变为同步。
即使使用异步生产者,也可以保证消息传递。这取决于否。重试次数和delivery.timeout.ms
.
通过ack=all
可以确保数据在 ISR 之间复制,并且您可以获得具有一致性保证的容错能力,以防其中一个代理死亡,消费者会看到预期看到的内容。
至于序列,消息在发送之前是批处理的。如果像批次 1、批次 2、批次3一样异步发送多个批次,并且由于某种原因,批次 1 在发送批次 2 和批次 3 后失败,则重新发送批次 1 将在批次2、批次3之后生成批次1,从而使其不按顺序。
如果需要序列,则需要确保将 max.in.flight.requests.per.connection 设置为1
,以便每个生产者在任何给定时刻只能有一个请求在进行中。但是,这可能会对性能产生影响。您可能希望调整其他设置,例如batch.size
增加它,以便在将动态请求设置为 1 的情况下提高吞吐量。
因此,您认为 ASYNC 无法保证交付和排序的假设是错误的。