【发布时间】:2021-04-26 15:59:52
【问题描述】:
如果我使用 -
同步发送消息producer.send(myRecord).get();
我是否保证消息会按照发送的顺序到达各个分区?
或者我还需要设置max.in.flight.requests.per.connection=1
(当前 max.in.flight.requests.per.connection 设置为大于 1,因此我需要先明确这一点,然后才能建议将其设置为 1,仅在需要时。我必须仅当它是强制性的时才推荐它。
我目前的理解是——
producer.send(myRecord).get();
还将负责重试。直到第一个成功或 N 次重试失败后才会处理下一条记录。只有在第一条记录失败或成功后,第二条记录才会被处理/发送给代理。
【问题讨论】:
-
我理解
max.in.flight.requests.per.connection的事情。但我不明白的是,当.send().get()阻塞线程时 - 无法尝试传递其他消息(除非在多个线程中使用相同的生产者,在这种情况下我同意艾伦的观点。)但是在单线程中情况 - 只是做.send().get()应该确保订购。
标签: java apache-kafka kafka-producer-api