kafka简介
- 一、维基百科
- 二、消息队列
-
- 2.1 什么是消息队列
- 2.2 发布/订阅消息队列
- 三、kafka 简介
一、维基百科
维基百科kafka简介入口
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,这使它作为企业级基础设施来处理流式数据非常有价值。此外,Kafka可以通过Kafka Connect连接到外部系统(用于数据输入/输出),并提供了Kafka Streams——一个Java流式处理库。
画重点照分布式事务日志架构的大规模发布/订阅消息队列。可以看到kafka 也就是一个发布/订阅的消息队列。只是它具有分布式以及大规模(支持大数据量)的特性。
二、消息队列
所以为了更具体,我们需要从消息队列聊起!
2.1 什么是消息队列
维基百科消息队列
在计算机科学中,消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的资料,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。
划重点:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它
消息的发送者和接收者不需要同时与消息队列交互
,可提炼出什么?解耦 了发送者&消费者,专业术语:解耦!
消息会保存在队列中
,可提炼什么? 可以具有保存消息的特性 ==》
- 那么保存消息有什么用? 如果下游消费者消费的慢,那是不是可以慢慢消费了。想想现实生活中的秒杀活动,是不是经常会挂?如果加入消息队列(假如存储&写入没有问题)那是不是消费者就不会因为数据量太大而挂掉,因为你可以慢慢消费(靠谱),专业术语: 限流削峰!
- 那是不是我也可以起多个消费者消费同一个消息,分别进行不同的处理。专业术语:异步处理!
2.2 发布/订阅消息队列
其实消息队列有两种模式,第一种是点对点模式(point to point, queue)另一种是发布/订阅模式(publish/subscribe,topic)
- 点对点:顾名思义也就是生产者发送一条消息到queue,只有一个消费者能收到,当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序。
- 发布/订阅模式:消息会被持久化到一个topic中,那么就可以起多个消费者去订阅一个或多个topic,那么topic 中的同一条数据就可以被多个消费者消费,数据被消费后也不会立马删除。
三、kafka 简介
(1)Producer:消息生产者,就是向Kafka broker发消息的客户端。
(2)Consumer:消息消费者,向Kafka broker取消息的客户端。
(3)Consumer Group(CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
(4)Broker:一台Kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
(5)Topic:可以理解为一个队列,生产者和消费者面向的都是一个topic。
(6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。
(7)Replication:副本。一个topic的每个分区都有若干个副本,一个Leader和若干个Follower。
(8)Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是Leader。
(9)Follower:每个分区多个副本中的“从”,实时从Leader中同步数据,保持和Leader数据的同步。Leader发生故障时,某个Follower会成为新的Leader