Kafka入门-1
视频资料,b站:https://www.bilibili.com/video/BV1eD4y1C7uM/?spm_id_from=333.788.recommend_more_video.14&vd_source=37596bc6f952081640b3f38ea9f6a2cb
深入理解 Kafka: 核心设计与实践原理。PDF 书资料: https://book.csdn.net/book/e2cca041f1e34fbd9b6e8f602c9f2501/chapter/1
介绍
Kafka 起初是由 Linkedin 公司采用 Scala语言开发的一个多分区、多副本且基于 Zookeeper 协调的分布式消息系统,现已捐给 Apache基金会。
目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐,可持久化,可水平扩展,支持流数据处理等多种特性而被广泛使用。
Kafka 定义
传统定义:Kafka 是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。
最新定义:Kafka 是一个开源的分式布流平台,被数千家公司用于高性能数据管道,流分析,数据集成和关键任务应用。
消息队列
消息队列的作用
- 削峰、缓冲
- 解藕
- 异步通信
消息队列的两种模式
点对点模式
参考 redis 队列,先进先出。
producer -> Message Queue -> consumer
发布/订阅模式
-
可以有多个 topic 主题(数据分类)
-
消费者消费数据之后,不删除数据
-
每个消费者相互独立,都可以消费到数据
基本概念
基础架构
一个典型的 Kafka 体系架构包括若干 Producer、若干 Broker、Cusumer,以及一个 ZooKeeper 集群。如图示。
(Kafka 基础架构图)
ZooKeeper 是 Kafka 用来负责集群元数据的管理、控制的选举等操作的。
Producer 将消息发产达到 Broker,Broker 负责将收到的消息存储到磁盘中,而 Consumer 负责从 Brocker 订阅并消费消息。
1、为方便扩展提高吞吐量,一个 topic 分为多个 partition
2、配合分区设计,提出消费者组的概念,组内每个消费者并行消费。
3、为提高可用性,为每个 Partition 增加或若干副本
(Kafka 基础架构)
术语
Producer:生产者
也就是发送消息的一方。生产者负责生产创建消息,投递到 Kafka 中
Consumer: 消费者
也就是接收消息的一方,消费者连接到 Kafka 上并接收消息,进而进行相应的业务逻辑处理
Broker: 服务代理节点
对于 Kafka 而言,Broker 可以简单地看作一个独立的 Kafka 服务节点或者 Kafka 服务实例。大多数情况下也可以将 Broker 看作一台 Kafka 服务器,前提是这台服务器只布署了一个 Kafka 实例。一个或者多个 Broker 组成了一个 Kafka 集群。
Topic :主题
Kafka 中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题,而消费者负责订阅主题并进行消费。
Partition: 分区
主题是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个主题,很多时间也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作是一个可追加的日志文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。
每个topic可以划分多个分区(每个Topic至少有一个分区),同一topic下的不同分区包含的消息是不同的。每一条消息发送到broker时,会根据partition的规则选择存储到哪一个partition。类似于分库分表的思想。
- 单机也可以分区,只不过分的这些partition在一台机器而已
- 创建时通过参数
--partition
指定分区个数 - 分区文件在log.dirs配置的目录中,会有对应个数目录,命名规则是
<topic_name>-<partition_id>
- 如果partition规则设置合理,那么所有的消息会均匀的分布在不同的partition中
- 每个消息在被添加到分区时,都会被分配一个offset(称之为偏移量)
- offset是消息在此分区中的唯一编号
- kafka通过offset保证消息在分区内的顺序,offset的顺序不跨分区,即kafka只保证在同一个分区内消息有序