把书读薄(Kafka权威指南 第六章)
kafka对消息可靠性做出的保证
1. 保证分区消息的顺序。同一个生产者给同一个分区写消息一定是有序的2. 得去的所有的同步副本写入了消息时,才会被认为已经提交
3. 只要有一个副本是活跃的消息就不会丢失
4. 消费者只能提取已经提交的消息
broker对消息可靠性的处理
1. 复制系数。即一个消息应该有多少个副本【一般3个】,这些副本在机架上如何分布,保证不会应为1个broker挂掉或者一个机架路由有问题而导致不可用。2. 不完全首领选举。允许不同步的副本作为首领。坏处是对于同一个偏移量,不同步的副本作为首领之后,获取的是新数据,而原来的副本存储的是旧数据。【出现场景可能是,1:假设3个副本,2个副本挂了,首领副本正常运行,这时候首领副本也挂了,随后启动了新的副本,数据不同步;2:3个副本中,首领副本正常,但是由于网络延迟跟随副本复制存在一定的延迟,如果首领副本挂了,其它副本都是不同步的】
3. 最少同步副本。当分区同步副本数少于最少同步副本的时候,就停止接受生产者的消息,抛出异常。以避免不完全选举所产生的数据写入与读出预期不一致的情况