Kafka
1.kafka的架构图
2.重要概念
- broker
- 一个kafka集群中可以有多个broker服务器进程,实现kafka集群的负载均衡,容错
- producer
- 生产者
- consumer
- 消费者
- topic
- 一个topic是某一类数据
- 一个broker可以有多个topic,一个topic可以有多个partition分区
- partition
- Kafka集群的分布式就是由分区来实现的,一个topic中的消息可以分布在不同的分区上
- replica
- 副本,实现kafka集群的容错,一个topic至少应该包含大于1 个副本
- consumer group
- 消费者组,每一个消费者组都有一个唯一的group.id,同一个消费者组中的消费者可以消费同一个topic中分区的数据
- offset
- 偏移量,对于消费者来说,可以根据offset来找到数据在partition中的位置,进而拉取数据
3.幂等性
-
生产者消息重复问题
- 生产者发送一条消息到kafka,kafka会把消息保存到partition中,并返回一个响应的ack,表示已经保存成功。但是如果响应过程中出现了问题,那么生产者就会重新发送一条一模一样的消息,那么分区中就会保存一个重复的消息
-
kafka中可以开启幂等性
- 当kafka中的生产者生产消息时会增加一个pid(生产者的唯一编号)和sequence number(针对消息的递增序列)
- 发送消息是会把这两个信息同时保存在分区中
- 如果后来发送的消息的sequence number<=前一个消息的sequence number 那么就不会保存这条消息
4.生产者的分区写入策略
- 轮询
- key.hash()%分区的数量
- 随机
- 自定义
乱序问题
- Kafka在使用生产者写入策略写入消息时,如果topic有多个分区,就会将数据散列在各个分区上
- 如果只有一个分区,那么消息是有序的
5.消费者分区分配策略
-
range范围分配策略
- kafka默认的消费者分配策略
- RoundRobin轮询策略
- Stricky粘性分配策略
- 分区分配尽可能的均匀
- 当发生rebalance再均衡的时候,分区分配尽可能的与上一次保持一致
- 没发生rebalance的时候和RoundRobin相似
6.leader和follower
- kafka中的leader和follower是相对分区有意义的,不是相对broker
- leader负责读写,follower只负责同步数据,如果leader挂了,会从follower中选举新的leader
- kafka在创建topic的时候会尽量让leader在不同的broker中,也就是负载均衡
- kafka中的leader和follower与zookeeper的不一样
- kafka中的follower只是负责同步数据,不能读写,相当于一个消费者
的leader和follower与zookeeper的不一样 - kafka中的follower只是负责同步数据,不能读写,相当于一个消费者
- zookeeper中的leader可读写,follower可读
- kafka中的follower只是负责同步数据,不能读写,相当于一个消费者