kafka究竟是干嘛的?

2年前 (2022) 程序员胖胖胖虎阿
189 0 0

kafka简介

  • 一、维基百科
  • 二、消息队列
    • 2.1 什么是消息队列
    • 2.2 发布/订阅消息队列
  • 三、kafka 简介

一、维基百科

维基百科kafka简介入口

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,这使它作为企业级基础设施来处理流式数据非常有价值。此外,Kafka可以通过Kafka Connect连接到外部系统(用于数据输入/输出),并提供了Kafka Streams——一个Java流式处理库。

画重点照分布式事务日志架构的大规模发布/订阅消息队列。可以看到kafka 也就是一个发布/订阅的消息队列。只是它具有分布式以及大规模(支持大数据量)的特性。

二、消息队列

所以为了更具体,我们需要从消息队列聊起!

2.1 什么是消息队列

维基百科消息队列

在计算机科学中,消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的资料,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。

划重点:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它

消息的发送者和接收者不需要同时与消息队列交互,可提炼出什么?解耦 了发送者&消费者,专业术语:解耦!

消息会保存在队列中,可提炼什么? 可以具有保存消息的特性 ==》

  1. 那么保存消息有什么用? 如果下游消费者消费的慢,那是不是可以慢慢消费了。想想现实生活中的秒杀活动,是不是经常会挂?如果加入消息队列(假如存储&写入没有问题)那是不是消费者就不会因为数据量太大而挂掉,因为你可以慢慢消费(靠谱),专业术语: 限流削峰
  2. 那是不是我也可以起多个消费者消费同一个消息,分别进行不同的处理。专业术语:异步处理

2.2 发布/订阅消息队列

其实消息队列有两种模式,第一种是点对点模式(point to point, queue)另一种是发布/订阅模式(publish/subscribe,topic)

  • 点对点:顾名思义也就是生产者发送一条消息到queue,只有一个消费者能收到,当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序。
  • 发布/订阅模式:消息会被持久化到一个topic中,那么就可以起多个消费者去订阅一个或多个topic,那么topic 中的同一条数据就可以被多个消费者消费,数据被消费后也不会立马删除。

三、kafka 简介

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

版权声明:程序员胖胖胖虎阿 发表于 2022年9月25日 上午11:24。
转载请注明:kafka究竟是干嘛的? | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...