这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
一、本堂课重点知识
今天这篇文章是有关我们很出门的消息队列中间件------Kafka的简单介绍,内容比较简单...可能不够全面
二、详细知识点介绍
概述
Kafka是什么?
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
Kafka的主要特性
Kafka 是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
支持通过Kafka服务器和消费机集群来分区消息。
支持Hadoop并行数据加载。
使用场景
Kafka作为一个非常著名的消息队列,他有着丰富的使用场景,比如:
- 微服务之间消息传递的消息队列
- 用户行为存储
- 日志存储
- Metrics 数据存储
如何使用 Kafka
只要按照下述步骤即可轻松建立起一个Kafka集群:
- 创建一个Kafka集群
- 在集群中创建一个Topic,并设置好分片数量
- 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法
- 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法
基本概念
接下来解释一下在Kafka中会遇到的一些名词和概念:
-
Topic
- 逻辑队列,不同 Topic 可以建立不同的 Topic
-
Cluster
- 物理集群,每个集群中可以建立起多个不同的 Topic
-
Producer
- 生产者,负责将业务消息发送到 Topic 中
-
Consumer
- 消费者,负责消费 Topic 中的消息
-
ConsumerGroup
- 消费者组,不同组 Consumer 消费进度互不干涉
Offset
在消息在 partition 内的相对位置信息,可以理解为唯一ID,在 partition 内部严格递增
Replica
分片的副本,分布在不同的机器上,可以用来容灾,Leader对外服务,Follower异步拉去leader的数据进行同步,如果leader挂了,可以将Follower提升为Leader再对外进行服务
ISR(In-Sync Replicas): 同步中的副本,对于Follower来说,始终和Leader是有着一定的差距,但当这个差距比较小的时候,我们就可以将这个follower副本加入到ISR中,不在ISR中的副本是不允许提升成为leader的
每个分片有多个 Replica,Learder Replica 将会从 ISR(In-Sync Replicas) 中选出
数据复制
下面这张图代表着Kafka中副本的分布图。途中Broker代表每个Kafka的节点,所有的Broker节点最终组成了一个集群。整张图表示,途中整个集群,包含了4个broker机器节点,集群有两个Topic,分别是Topic1和Topic2,Topic1有两个分片,Topic2有一个分片,每个分片都是三副本的状态。这里中间有一个Broker同时也扮演了Controller的角色,Controller是整个集群的大脑,负责对副本和Broker进行分配。
架构
而在集群的基础上,还有一个模块是ZooKeeper,ZooKeeper主要是用于存储集群的元数据信息,比如副本的分配信息等等,Controller计算好的方案都会放到这个地方(以前学SpringCloud的时候也有用到Zookeeper来着)