<>要解决的问题
1 存储数据

2 重复消费

* 将数据的生产和消费分开 (异步通信)
* 保证顺序
* 缓冲
<>Kafka 重要的消息组件
<>生产者 <>消费者 <>消费者组 <>Topic
Kafka对消息保存时,根据Topic 归类
<>Broker
一个Kafka实例称为一个Broker
<>partition
一个大的Topic
可以分为多个partition,用来做负载均衡。一个partition中的数据是有序的,不能保证多个partition之间的数据有序。如果数据必须有序,就放到一个partition中
<>offset <>有几个Broker,最多就有几个备份。 <>kafka 消费是以消费者组为单位的(一个消费者,也是放在消费者组中的)。
一个消费者组消费一个topic 的数据,消费者组中不同消费者 只能 消费不同分区的数据。一个消费者只能消费 一个分区的数据。
如果一个topic 有两个分区,三个消费者来消费的话,有一个消费者什么也不做。 只能增加分区,才有用。

如果一个topic 有三个分区,两个消费者,后面突然再增加一个消费者,会引发再平衡。

<>一个topic 可以由多个分区组成,一个消费者只能消费一个分区。
<>生产者和 zookeeper 不会产生直接的联系。 生产者需要得到 分区信息,但是 因为kfaka 集群和zookeeper 一直
有连接,生产者直接访问集群的时候,就可以获取到zk中的信息。 <>消费者需要连接zookeeper, 因为需要维护offset 并且需要不断更新到
zookeeper中。 同时还要把 消费者消费的哪个分区的数据 这种对应关系 提交到zookeeper。 <>Kafka 使用零复制技术提高传输效率
(数据不会读取到应用层,直接通知操作系统,完成相应的操作),另外Kafka 顺序写磁盘效率(PageCache )比随机写内存要高,保证了Kafka的吞吐量。
预读 和后写 技术 也是为了提高吞吐量。 <>分区的原则
(1)指定了patition,则直接使用;

(2)未指定partition但指定key,通过对key的value进行hash算出一个patition;

(3)patition和key都未指定,使用轮询选出一个patition
<>每个partition 可以有多个副本,副本有一个 leader,其他为follower(只负责从leader 中同步数据)。
producter和consumer 只与leader 交互。 如果partition 没有副本,当broker 挂掉后,该broker 上
partition 的数据不能被消费,同时生产者也将不能往该borker 上 的partition 上面存放 数据。
<>kafka 写数据流程



*
生产者连接kafka集群,集群通过连接zookeeper获取到分区信息,把它返回给生产者

*
生产者拿到分区信息后,会启动sender 线程,使用双端队列来向kafka 集群发送数据

*
kafka 集群中是否收到消息,基于ack 应答机制
0: 集群无需应答,即可发送下一条,性能非常好,但是可能会丢失数据,不安全。

1:集群中只需要Leader应答即可发送下一条,性能稍微差一下,而且数据可能会丢失。

-1(all):集群中所有的备份都需要应答方可发送下一条数据。性能最差,但是数据不会丢失

HW : 高水位,是消费者在当前分区中能够读取的最大偏移量
LEO : Log End Offset,当前broker日志中最后存储的数据偏移量
<>kafka 会保存一定大小的数据和一定时间类的数据,是否删除历史数据不会影响kafka 性能。
<>kafka 消费数据流程

* 消费者从 zookeeper 中获取分区信息,zookeeper 返回分区信息给生产者
* 生产者从分区中拉取数据进行消费。
以上offset 会保存在zookeeper中
消费者也可以不连接zookeeper,直接从集群中获取每个topic 分区信息,这样offset 也会保存到kafka 集群中
<>一个消费者可以读取多个分区的数据,但是一个分区的数据只能属于某一个消费者。
欢迎学习大数据的同学加我微信,一起交流学习。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信