概述:
1、kafka使用规范主要从,生产、可靠性、和消费为轴线定义使用规范,另外Kafka建议核心业务系统不要使用(对数据可靠性要求高),因为Kafka高效性能源于批量设计思想,要充分利于Kafka高效性能,前提是要允许部分数据丢失。
2、kafka使用核心:削峰、解耦、向下游并行广播通知(无可靠性保证)和分布式事务,本规范仅从削峰、解耦、向下游并行广播通知论述。
1、可靠性(强制):
可靠性包括Producer发送消息机制的可靠性,Kafka Server(Broker)消息持久化刷盘机制和Broker主从节点消息同步机制,Consumer消息的消费机制。
1.1、Producer发送消息的可靠性:
1.1.1、核心参数设置:
acks:用于Producer指明Broker主从节点消息同步的机制,有如下三个设置:
- acks=0,表示生产者在成功写入消息之前不会等待任何来自服务器的响应。说白了就是Producer只负责消息发送,不管消息是否成功到达Broker,消息可靠性极低,但发送效率极高;
- acks=1,表示只要集群的Leader分区接收到了消息,就会向生产者发送一个成功响应的ack。说白了就是Producer只确保消息发送到了Leader,消息可靠性不太高,发送效率一般;
- acks=all,表示只有所有参与复制的节点(ISR和min.insync.replicas综合决定)全部收到消息时,生产者才会接收到来自服务器的响应ack。说白了就是Producer发送的消息会从Leader同步到Slave,具体同步多少Slave节点?可以通过min.insync.replicas指定;
min.insync.replicas:用于指明Producer发送的消息,Leader收到消息后,会同步到Slave节点的个数,该值默认是1,值越大,消息可告性越高,但发送效率极低。同时该参数控制消息至少被写入到多少个Leader才算是"真正写入",acks=all需要考虑真正写入;
replica.lag.time.max.ms:Kafka判断ISR中的Follower和Leader是否需要同步?根据是参数 replica.lag.time.max.ms (主从之间同步落后时间差),首先ISR 的全称是:In-Sync Replicas ISR是一个Follower的列表,里面存储的是能跟Leader数据同步一致的Follower,确定一个Follower在ISR列表中,有3个判断条件:
- 根据Follower和Leader的交互时间差,如果大于某个时间差就认定这个Follower不行了,就把此Follower