设为首页 加入收藏

TOP

小白系列之通俗易懂的Kafka
2019-04-18 14:32:29 】 浏览:130
Tags:小白 系列 通俗 易懂 Kafka

Kafka

Kafka的概念,就是这么简单,就是这么直白。

什么是Kafka?

Kafka是Apache开发的一种分布式的发布-订阅消息系统。
特点是:1.快速,每秒可以生产25万条消息(50MB),处理55万条数据(110MB)。2.可以持久化存储数据,并在集群中复制,防止数据丢失。3.消息处理在consumer上,减轻服务器的压力。

结构

Topic主题

个人Topic是对一组消息的归纳。一个Kafka中可以创建多个主题,以主题为单位来管理消息,主题之间互相隔离,互不影响。

Partition分区

Kafka的主题中还可以划分出多个分区,以分区为单位对主题中的数据实现多副本和分布式存储。
segment:分区内会被划分为多个大小相等的segment,segment中.log文件用来存放数据分段,.index用来存放索引信息。

Offset序号

分区中每个消息都有的一个连续的序列号,用来唯一标识这个消息。

Replication副本

每个分区都可以有多个副本,分布式存储在不同的服务器中,共同处理请求提升性能,保证了Kafka的容错能力。多个副本中会有一个leader和多个follower,follower只对外提供读能力。

生产消费

Producer生产者
Procedure将消息发布到指定的Topic中,默认产用负载均衡随机选择分区。
Consumer消费者
Consumer负责消费Topic中的数据,消费时由Consumer来维护offset,一般情况下随着Consumer不断读取消息,offset的值也不断增加。也可以手动修改offset值,实现从指定位置读取数据。
由于Kafka会保留所有已发布的数据,并且可以修改offset从指定位置读取,所以多个Consumer之间可以形成发布订阅模式,各自消费,互不影响;也可以实现队列模式达到相互竞争的效果。
Kafka可以将多个Consumer组成消费者组的模式,组间实现发布订阅模式,组内实现队列模式。
当读取指定分区内某个offset数据时,会先根据offset和当前分区内的segment名称作比较,确定出在哪个segment内,在根据索引文件确定offset在数据文件中的开始位置进行读取,根据数据格式判断结果。

可靠性保障

AR ISR OSR
kafka分区中维护了一个AR列表,包含当前分区所有副本编号。AR中又分为ISR和OSR。ISR是同步列表,要求所有副本同步完数据才能提交。OSR是非同步列表,数据是否同步不影响数据提交。
最开始所有的副follower都早ISR中,当某个副本同步速度慢于指定阈值时转入OSR中,速度回复后可以回到ISR中。这种方案兼顾了可用性和性能。
LEO HW
LEO表示分区中最新数据的offset,不管这个数据是否在ISR中同步完成。
HW表示表示消费者能看到的最大的offset,小于这个offset的数据可以被看到,大于等于这个offset的数据要么不存在,要么未同步完成。
同步数分区据
最开始,分区中的LEO等于HW,之后写入数据时,LEO指向最后一条数据,当所有分区同步完一条数据HW才指向同步完的数据,直到所有的数据都同步完,HW才再等于LEO。外界才能访问到所有数据。
截断机制:当leader宕机,重新选取leader时,所有副本都会将数据阶段到HW的位置,保证所有副本不会有为同步的数据。保证了数据的一致性。
选举机制
当leader宕机后,kafka会从ISR中选举一个follower成为新的leader,因为LSR中所有的follower的HW都与leader一样,再加上截断机制不会存在数据不一致问题。
极端情况下会存在leader宕机后ISR中没有副本的情况,这种情况下有两种策略:一是不允许OSR中的follower成为leader,一直等待leader恢复工作,缺点是leader不恢复则集群无法写入。二是允许OSR中的follower成为leader,但是可能导致数据丢失。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇golang   将kafka的offset置.. 下一篇大数据实战之Logstash采集->Ka..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目