Kafka 总结
总概念
一个分布式的发布订阅模式的消息系统
优点
1.可以缓冲数据,让突然暴涨的数据能被暂缓处理得到消化。
2.解耦,让消息队列成为一个借口,不需要和具体代码纠缠起来。
3.异步通信,放入消息队列后就可以处理其他事情
4.高吞吐量:可以支持每秒数千条消息的消息吞吐量。
5.低延迟:具有毫秒级的极低延迟
6.容错:Kafka能够抵抗集群中的节点/机器故障。
7.耐久性:由于Kafka支持消息复制,因此消息永远不会丢失
8.可扩展性:卡夫卡可以扩展,而不需要通过添加额外的节点而在运行中造成任何停机。
基本概念
Broker:一个服务代理,节点
Topic:一个主题,让发布者发布消息,消费者对应的拉取消息
Partition:Topic 下的分区,一个具体的消息队列
Leader:主节点,调用数据处。Follower(副节点)从主节点处拷贝数据。
ISR:副本同步队列,在队列内的节点都是需要拷贝数据的节点,当这些节点都被拷贝后说明消息正常。一旦队列中的节点超过一定时间或一定条数的消息未复制就被踢出节点
AR:所有副本
Zookeeper:不属于Kafka,但是管理Kafka节点的协调组件,负责判断节点是否正常,需要在Kafka前启动
Kafka为何速度快
1.持久化了消息到磁盘,并顺序读写。
2.零拷贝技术减少了拷贝次数。
3.消费者从 Topic 拉数据
4.批量处理请求,流式交互
优化方法
1.增加线程
2.增加 Partition
3.增加 Producer 实例
producer 打数据,ack 为 0, 1, -1 的时候代表啥
1(默认) 数据发送到Kafka后,经过leader成功接收消息的的确认,就算是发送成功了。在这种情况下,如果leader宕机了,则会丢失数据。
0 生产者将数据发送出去就不管了,不去等待任何返回。这种情况下数据传输效率最高,但是数据可靠性确是最低的。
-1 producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。当ISR中所有Replica都向Leader发送ACK时,leader才commit,这时候producer才能认为一个请求中的消息都commit了。
如果leader crash时,ISR为空怎么办
配置参数:unclean.leader.election
true(默认):允许不同步副本成为leader,由于不同步副本的消息较为滞后,此时成为leader,可能会出现消息不一致的情况。
false:不允许不同步副本成为leader,此时如果发生ISR列表为空,会一直等待旧leader恢复,降低了可用性。