什么是kakfa?
先看官网是怎么描述的:
Apache Kafka 是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序。
在旧的版本里面,Kafka是基于Zookeeper建立的一个分布式消息系统,但最新版,zookeeper已经被淘汰了。
同时,Kafka最强大的优势便是高吞吐量、高性能、实时性、高可靠。
削峰填谷
在大型的高并发场景中,往往要对数据进行计算、分析,在一个大数据的系统中,从外部收集到的数据是很难实时响应的,这个时候需要一个系统先去承载这部分数据量,Kafka就可以充当一个消息系统的角色,并且由于这个中间层的存在,可以让应用之间的通信变的灵活,原则上是解耦的。
分布式
来看一个消息队列的对比表格:
特点 | ActiceMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
单机吞吐量 | 万级 | 万级 | 10W级 | 10W级,吞吐量高。一般配合大数据系统进行实时数据计算、日志采集等 |
topic数量对吞吐量的影响 | topic可以达到几百、几千个级别,吞吐量会有小幅度的下降 | topic到达几百个后吞吐会明显下降 | ||
时效性 | ms级 | 微妙级别,这是RabbitMQ的最大特点,延时最低 | ms级 | ms以内 |
可用性 | 高 | 高 | 非常高,适合大型分布式结构 | 非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 |
消息可靠性 | 有较低的概率丢失 | 经过参数配置,可以做到0丢失 | 经过参数配置,可以做到0丢失 | |
核心特点 | MQ领域的功能及其完备 | 基于erlang语言开发,并发强、性能好、延时低 | 阿里巴巴开源的MQ组件,支持分布式、高可用 | 功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及数据采集被大规模使用 |
Client
Topic
Topic是一个虚拟的概念,由1到N个Partitions组成.
类似于消息队列中的Queue.
比如说我们现在需要做一个计算积分的任务,那么就可以定义一个“积分”的主题,去进行消息传递
Producer
消息生产者,生产者负责向主题中发生消息
Consumer
消息消费者,消费者负责消费主题中的消息。在Kafka中,对点对点模型引入了消费组概念,即多个消费者实例共同消费一个TOPIC中的消息。这样可以增加消息消费的速率,一个进程或者一个线程都可以是一个消费者实例。
消费者之间可以协同消费那些失败的消息,比如A,B是一组,A无法消费,这个消息就会到达B,这个过程称为Rebalance.
Consumer Offset
每个消费者单独记录消息的位移,即消费后+N;
Server
Broker
Kafka的服务端被称为Broker服务进程,那么多个Kafka则组成一个集群,也就是多个Broker.
通常在生产环境中,不同的Broker部署在不同的机器中,来保证kafka集群的高可用,一旦有单节点出现故障,其他的Broker仍然可以提供服务
Replica
副本,kafka会把同一份数据拷贝到多个机器上,这些数据统一称为副本。在副本中,还区分Leader
和Follower
,顾名思义,Leader负责写入,Follower负责备份。但是这里跟普通的master和slave不同,kafka中的Follower
是不提供对外服务的.
Partition
实际消息存储单位.分区解决了分布式系统中伸缩性的问题,如果一个Broker中的Topic接收了太多的消息,导致单台机器无法容纳了,那么就会造成故障。kafka的思想是,将topic进行分区,然后再结合副本分别保存在不同的节点上。这跟es中的分片也是异曲同工之妙。
分区从0开始编号.
Offset
位移,每条消息在分区中都有属于自己的位置,这就是位移,如果往分区中写入了10条,那么这些数据的顺序是0,1,2,3....在某些场景下,可以根据位移实现顺序性.