目录
副本的目的就是冗余备份,当某个Broker上的分区数据丢失时,依然可以保障数据可用。因为在其他的Broker上的副本是可用的。
Producer的ACKs参数
对副本关系较大的是,producer配置的ack参数了,acks参数表示当生产者生产消息的时候写入到副本的要求严格程度。它决定了生产者如何再性能和可靠性之间取舍。
配置
Properties props = new Properties();
props.put("bootstrap.servers", "node1.itcast.cn:9092");
props.put("acks", "all");
Properties props = new Properties();
props.put("bootstrap.servers", "node1.itcast.cn:9092");
props.put("acks", "all");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
acks配置为0
ack为0,表示发生消息不要等到broker确认,直接发送下一条数据,性能最高,但可能存在数据丢失的情况。
acks配置为1
当生产者的ACK配置为1时,生产者会等待leader副本确认接收后,才会发送下一条数据,性能中等。
acks配置为-1或者all
ack为-1,表示等待所有副本以及将数据同步后,才会发送下一条数据,性能最慢