1.5.3 Ack应答机制
Last updated
Last updated
什么是Ack应答机制?答:就是握手机制,跟CAlab中实现的访存握手没什么区别。那这里为什么要单独提到它呢?因为 Kafka 中的握手并不是固定的,而是用户可调的。
简单来说,用户可以根据自己的需要调节ack参数,在可靠性和性能间做出权衡。
Kafka支持的三种可靠性级别:
acks=0,表示生产者在写入消息时不会等待任何来自服务器的响应(高吞吐量, 丢数据)
acks=1,表示只要集群的leader分区副本接收到了消息,就会向生产者发送一个成功响应的ack,此时生产者接收到ack之后就可以认为该消息是写入成功的(如果一个没有收到消息的节点成为了新的Leader,消息就会丢失)
acks=-1(all),Leader 和 Follower 全部落盘成功后才返回 ACK。(安全,高延时)
比如,对于acks = 0 的代码:
可以看到它真的就是字面意义上的“什么都不做”(当然必要的异常处理不在此列)
总的来说,Kafka所提供的这种用户可调节的可靠性参数把性能与可靠性的平衡掌握重新交会给了客户,虽然就我而言感觉其粒度还是很大,但这种设计还是非常出彩的。