Kafka的特点:
- 1.高并发:支持数千个客户端同时读写数据
- 2.高吞吐低延迟:Kafka每秒处理几十万条数据,但是延迟只有几毫秒
- 3.可扩展:集群支持热扩展
- 4.持久性:将消息数据持久化到本地磁盘,多副本保存
- 5.容错性:允许集群节点失败
Kafka的架构
- 1.Producer:生产者,向kafka Broker发消息
- 2.Topic:主题,可以理解为一个消息队列,一个Topic可以分成多个分区
- 3.Consumer:消费者,向Kafka Broker拉取消息,多个消费者可以构成一个消费者组
- 4.Consumer Group:消费者组, kafka 用来实现一个 topic 消息的广播(发给所有consumer)和单播(发给任意一个 consumer)的手段。一个 topic 可以有多个 Consumer Group。
- 5.Broker:一台kafka服务器就是一个Broker,一个集群由多个Broker组成,一个Broker可以容纳多个Topic
- 6.Partition:分区,数据量非常大的Topic可以分布在多个Broker上,每一个partition都是一个有序的队列,即局部有序.靠着offset保持有序.但是不能保证全局有序.
- 7.Offset:偏移量,kafka存储文件都是用offset.kafka来命名,方便查询
Kafka分区的目的
分区对于kafka的好处是可以实现负载均衡,同时可以给消费者消费数据提高并发度,提高读取效率,
Kafka如何做到消息的有序性
Kafka可以局部有序,但是不能全局有序.kafka每个分区的数据都是有序的,单个partition只能有一个消费者消费.
kafka如何保证消息不丢失
分三个部分保证数据的可靠性和一致性:生产者层面,broker层面,消费者层面
生产者:
ack机制
0不关心响应
1默认的,等待leader确认信息
-1(all)全部确认
retries重试机制----默认为0,不重试
幂等性:
操作多次的结果和操作一次的结果是一样的(enable.idempotence=true)
保证我们分区的精准一次性
(全局)事务:read–process–write(kafka–程序–kafka)
broker集群
1.分区机制针对topic进行分区–不同分区
2.副本机制
消费者
自己手动提交 存储在外部介质中 比如mysql
谈一谈Kafka数据一致性原理
数据一致性指的是无论是先前的leader还是现在新选取的leader,消费者都可以读到一样的数据.这是由高水位线保障的,高水位线(HW)取决于ISR列表中偏移量最小的分区.类似于木桶原理,只取最小偏移量的数据.是为了保证数据安全,如果选择水位线高的,将会导致数据不安全
ISR,OSR,AR分别是什么
AR:所有副本
ISR:副本同步队列(包括leader在内)
OSR:副本不同步队列
AR = ISR + OSR
Kafka分区数可以增加或者减少吗?为什么?
可以增加不可以减少
不能减少是因为会导致数据丢失,会有未消费的数据导致丢失,如果要插入其他分区则不能保证单分区有序,而且偏移量也不好管理.
Kafka新旧消费者的区别
旧的消费者主要包括:SimpleConsumer(简单消费者)和ZookeeperConsumerConnection(高级消费者),高级消费者和新的消费者有点像,有消费者群组,有分区再均衡,不过高级消费者使用ZK来管理消费者群组,并不具备偏移量再均衡的课操控性.
ZK在kafka中的作用
-
kafka集群broker位置状态信息
-
给broker进行选举,选举controller
-
保存集群topic元数据
1. 名称
2. 分区1. leader副本位置 2. ISR副本
-
保存消费者信息
1. 老版本中 消费记录是保存在ZK中 2. 新版本中 消费记录是保存在kafka自己内部主题中
-
kafka集群的一些配置参数