icann 域名注册网站,一般vs做的网站的总体框架,开发一个网站做公司内部用,网站后台无法上传照片1.生产者发送数据到Topic partition的可靠性保证 为保证producer发送的数据#xff0c;能可靠的发送到指定的topic#xff0c;topic的每个partition收到producer发送的数据后#xff0c;都需要向producer发送ack#xff08;acknowledgement确认收到#xff09;#xff0c…1.生产者发送数据到Topic partition的可靠性保证 为保证producer发送的数据能可靠的发送到指定的topictopic的每个partition收到producer发送的数据后都需要向producer发送ackacknowledgement确认收到如果producer收到ack就会进行下一轮的发送否则重新发送数据。
2.Topic partition存储数据的可靠性保证
2.1 副本数据同步策略
方案优点缺点半数以上完成同步就发送ack延迟低选举新的leader时容忍n台节点的故障需要2n1个副本全部完成同步才发送ack选举新的leader时容忍n台节点的故障需要n1个副本延迟高
Kafka选择了第二种方案原因:
为了容忍n台节点的故障第一种方案需要2n1个副本而第二种方案只需要n1个副本而Kafka的每个分区都有大量的数据第一种方案会造成大量数据的冗余。第二种方案的网络延迟会比较高但网络延迟对Kafka的影响较小。
2.2 ISR队列 leader收到数据所有follower都开始同步数据但有一个follower因为某种故障迟迟不能与leader进行同步那leader就要一直等下去直到它完成同步才能发送ack。这个问题怎么解决呢 Kafka提供的解决方案:ISR队列
Leader维护了一个动态的in-sync replica set (ISR)意为和leader保持同步的follower集合。当ISR中的follower完成数据的同步之后leader就会给producer发送ack。如果follower长时间replica.lag.time.max.ms未向leader同步数据则该follower将被踢出ISR。Leader发生故障之后就会从ISR中选举新的leader。
2.3 ack应答队列 对于某些不太重要的数据对数据的可靠性要求不是很高能够容忍数据的少量丢失所以没必要等ISR中的follower全部接收成功。
ack参数备注0partition的leader副本接收到消息还没有写入磁盘就已经返回ack当leader故障时有可能丢失数据1partition的leader副本落盘后返回ack如果在follower副本同步数据之前leader故障那么将会丢失数据-1(all)partition的leader和follower副本全部落盘成功后才返回ack。但是如果在follower副本同步完成后leader副本所在节点发送ack之前leader副本发生故障那么会造成数据重复。
3.leader和 follower故障处理细节 LEO(Log End Offset) 每个副本最大的offset。HW(High Watermark) 消费者能见到的最大的offsetISR队列中最小的LEO。 follower故障 follower发生故障后会被临时踢出ISR待该follower恢复后follower会读取本地磁盘记录的上次的HW并将log文件高于HW的部分截取掉从HW开始向leader进行同步。等该follower的LEO大于等于该Partition的HW即follower追上leader之后就可以重新加入ISR了。 leader故障 leader发生故障之后会从ISR中选出一个新的leader之后为保证多个副本之间的数据一致性其余的follower会先将各自的log文件高于HW的部分截掉然后从新的leader同步数据。 注意这只能保证副本之间的数据一致性并不能保证数据不丢失或者不重复。