面试题答案
一键面试acks参数作用
acks参数用于指定Producer发送消息后,需要等待多少个副本确认消息已成功接收,以此来控制消息发送的确认机制。它确保消息在一定程度上不会丢失,同时也影响着Producer的性能。
acks=0
- 可靠性:可靠性最低。Producer发送消息后,无需等待任何Broker的确认,直接继续发送下一条消息。如果此时Broker发生故障,消息可能丢失。
- 性能:性能最高。因为不需要等待确认,消息发送速度非常快,适用于对消息可靠性要求不高,追求高吞吐量的场景,如日志收集等。
- 应用场景:适合对数据丢失不敏感,需要高吞吐量的场景,例如收集网站访问日志,即使少量日志丢失也不影响整体数据分析。
acks=1
- 可靠性:可靠性适中。Producer发送消息后,只要Leader副本成功接收消息,就会收到确认。如果此时Leader副本所在的Broker发生故障,而该消息还未来得及复制到Follower副本,消息可能丢失。
- 性能:性能较高。相比acks=0,由于需要等待Leader确认,性能略有下降,但在大多数场景下可以接受。适用于对可靠性有一定要求,同时也关注性能的场景。
- 应用场景:适用于对数据准确性有一定要求,但允许少量数据丢失的场景,如实时监控系统,偶尔丢失一些监控数据对整体影响不大。
acks=all(或acks=-1)
- 可靠性:可靠性最高。Producer发送消息后,需要等待ISR(In-Sync Replicas,与Leader保持同步的副本集合)中的所有副本都成功接收消息后,才会收到确认。只要ISR中有一个副本存活,消息就不会丢失。
- 性能:性能最低。因为需要等待所有副本确认,网络延迟和副本同步延迟会显著影响消息发送速度。适用于对数据可靠性要求极高,不容许数据丢失的场景。
- 应用场景:适合金融交易等对数据准确性和完整性要求极高的场景,如银行转账记录,任何一笔交易数据都不能丢失。