1、可靠性的保证?
下面通过从topic的分区副本、producer发送到broker、leader选举三个方面来阐述kafka的可靠性。
<1>、Topic的分区副本:
其实在kafka-0.8.0之前的版本是还没有副本这个概念的,在之后版本引入了副本这个架构,每个分区设置几个副本,可以在设置主题的时候可以通过replication-factor参数来设置,也可以在broker级别中设置defalut.replication-factor来指定,一般我们都设置为3;
三个副本中有一个副本是leader,两个副本是follower,leader负责消息的读写,follower负责定期从leader中复制最新的消息,保证follower和leader的消息一致性,当leader宕机后,会从follower中选举出新的leader负责读写消息,通过分区副本的架构,虽然引入了数据冗余,但是保证了kafka的高可靠。
Kafka的分区多副本是Kafka可靠性的核心保证,把消息写入到多个副本可以使Kafka在崩溃时保证消息的持久性及可靠性。
<2>、Producer发送消息到broker:
topic的每个分区内的事件都是有序的,但是各个分区间的事件不是有序的,producer发送消息到broker时通过acks参数来确认消息是否发送成功,request.required.acks参数有三个值来代表不同的含义;
acks=0:表示只要producer通过网络传输将消息发送给broker,那么就会认为消息已经成功写入Kafka;但是如果网卡故障或者发送的对象不能序列化就会错误;
acks=1:表示发送消息的消息leader已经接收并写入到分区数据文件中,就会返回成功或者错误的响应,如果这时候leader发生选举,生产者会再次发送消息直到新的leader接收并写入分区文件;但是这种方式还是可能发生数据丢失,当follower还没来得及从leader中复制最新的消息,leader就宕机了,那么这时候就会造成数据丢失;
ack