MQ篇(3-1)--kafka基本原理

本文介绍了Kafka的基本概念,探讨了其高吞吐量、低延迟、可扩展性等特点,并详细解析了Kafka的架构组成及其核心概念,如Broker、ConsumerGroup、Topic等。

一、Kafka基本概念

        Kafka是由LinkedIn开发的一个分布式基于发布/订阅的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。

        Kafka遵循了一种大部分消息系统共同的传统的设计:producer将消息推送到broker,consumer从broker拉取消息

特点:

1高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

2可扩展性:kafka集群支持热扩展

3持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

4容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

5高并发:支持数千个客户端同时读写

 

缺点:

(1)由于是批量发送,数据并非真正的实时;

(2)对于mqtt协议不支持;

(3)不支持物联网传感数据直接接入;

(4)仅支持统一分区内消息有序,无法实现全局消息有序;

5监控不完善,需要安装插件;

(6)依赖zookeeper进行元数据管理;

 

 

使用场景:

1收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、HBase、Solr等。

2消息系统:解耦和生产者和消费者、缓存消息等。

3用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

(4)运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

5流式处理:比如spark streaming和 Flink

二、Kafka结构


Broker:

一个Borker就是Kafka集群中的一个实例,或者说是一个服务单元。连接到同一个zookeeper的多个broker实例组成kafka的集群,一般只有一个leader,其余为follwer。

Consumer Group:

同一个group的consumer可以并行消费同一个topic的消息,但是同group的consumer,不会重复消费。

Topic:

kafka中消息订阅和发送都是基于某个topic。Topic就像一个特定主题的收件箱,producer往里丢,consumer取走。

三、kafka核心概念


kafka采用分区(Partition)的方式,使得消费者能够做到并行消费,从而大大提高了自己的吞吐能力。同时为了实现高可用,每个分区又有若干份副本(Replica),这样在某个broker挂掉的情况下,数据不会丢失。

1.分区(Partition)

无分区时,一个topic只有一个消费者在消费这个消息队列。采用分区后,如果有两个分区,最多两个消费者同时消费,消费的速度肯定会更快。如果觉得不够快,可以加到四个分区,让四个消费者并行消费。分区的设计大大的提升了kafka的吞吐量!!

备注:

(1)一个partition只能被同组的一个consumer消费

(2)同一个组里的一个consumer可以消费多个partition

(3)消费效率最高的情况是partition和consumer数量相同。这样确保每个consumer专职负责一个partition。

2.副本(Replica)

在kafka中,正本和副本都称之为副本(Repalica),但存在leader和follower之分。活跃的称之为leader,其他的是follower。

每个分区的数据都会有多份副本,以此来保证Kafka的高可用。

Topic、partition、replica的关系如下图:

topic下会划分多个分区(partition),每个分区(partition)都有自己的副本(replica),其中只有一个是leader 副本(replica),其余的是follower 副本(replica)。

由此可见,leader replica做了大量的工作。所以如果不同partition的leader replica在kafka集群的broker上分布不均匀,就会造成负载不均衡。

kafka通过轮询算法保证leader replica是均匀分布在多个broker上。

(1)Replica均匀分配在Broker上,同一个partition的replica不会在同一个borker上

(2)同一个partition的Replica数量不能多于broker数量。多个replica为了数据安全,一台server存多个replica没有意义。server挂掉,上面的副本都要挂掉。

(3)分区的leader replica均衡分布在broker上。此时集群的负载是均衡的。这就叫做分区平衡

备注:

1.分区平衡

基本概念:

(1)AR: assigned replicas,已分配的副本。每个partition都有自己的AR列表,里面存储着这个partition最初分配的所有replica。注意AR列表不会变化,除非增加分区。

(2)PR(优先replica):AR列表中的第一个replica就是优先replica,而且永远是优先replica。最初,优先replica和leader replica是同一个replica。

(3)ISR:in sync replicas,同步副本。每个partition都有自己的ISR列表。ISR是会根据同步情况动态变化的。

最初ISR列表和AR列表是一致的,但由于某个节点死掉,或者某个节点的follower replica落后leader replica太多,那么该节点就会被从ISR列表中移除。此时,ISR和AR就不再一致

如果Replica 0副本挂了,他会重新选举一个副本当该分区leader,但还保持优先副本。当Replica 0回来了,因为其为优先副本,所以会重新变为Leader。

2.Partition的读和写

写的时候:采用round-robin算法,轮询往每个partition写入。

读的时候:

(1)每个consumer都维护一个offset值,指向的是它所消费到的消息坐标。同一个consumer group组内可以消费同一个topic中不同分区。

每个consumer维护的唯一元数据是offset,代表消费的位置,一般线性向后移动。

consumer也可以重置offset到之前的位置,可以以任何顺序消费,不一定线性后移。

(2)同一个消息可能会被不同的consumer group消费。

(3)每个partition都是有序的不可变的。

(4)Kafka可以保证partition的消费顺序,但不能保证topic消费顺序。

 更多内容:

MQ篇(1)--ActiveMQ、RabbitMQ、RocketMQ、kafka中间件对比

MQ篇(2-1)--最详细的RabbitMQ介绍

MQ篇(2-2)--RabbitMQ如何保证消息的可靠性

MQ篇(3-1)--kafka基本原理

MQ篇(3-2)--kafka核心组件之一-协调器

MQ篇(3-3)--kafka核心组件之二-副本管理器

MQ篇(3-4)--kafka核心组件之三-控制器

MQ篇(3-5)--kafka核心组件之四-日志管理器

MQ篇(3-6)--kafka特点

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sun cat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值