IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 深入kafka设计原理-kafka基础概念 -> 正文阅读

[大数据]深入kafka设计原理-kafka基础概念

kafka基础概念

kafka应用场景

kafka是LinkedIn最初设计并开源出来的分布式事件流平台, 它主要支持发布和订阅消息、持久存储消息以及追溯事件流等. kafka生态非常的成熟, 一般kafka可以有以下场景:

消息系统
kafka作为一种分布式发布订阅消息系统, 支持水平伸缩扩展且具备高吞吐量和高可用性. kafka具备传统消息系统的作用如应用解藕、流量削峰、异步消息等, 同时kafka还提供消息顺序性以及消息回溯等功能.

流式处理平台
kafka因为其可靠性可以作为流式处理系统的可靠数据来源, 能够很好的跟Apache Storm、Apache Spark等快速集成. 除了作为数据来源, kafka也提供了强大的流式处理类库.

事件存储系统
kafka将各个消息事件存储在磁盘中, 作为事件存储系统. kafka可以很好的将其他数据源的数据如ES导入到kafka中, 也可以将kafka中的数据导出到其他存储中. kafka官方提供了非常多的connect, 用于快速集成其他数据源. 作为存储系统, 需要考虑存储时长, 默认kafka存储有效期是一周, 可以根据应用具体需求调整更长或者更短.

kafka基本概念

kafka主要分为生产者producer、服务器broker和消费者consumer三大元素. 生产者producer主要是构建消息并发送到服务器broker、服务器broker接收消息并存储在本地磁盘、消费者consumer从服务器broker获取消息并处理. 整体架构图如下:

?

主题Topic和分区Partition
Topic: 消息主题, 用于区分不同类型消息, 类似于文件系统的文件夹一样, 消息以topic维度被分组和存储, 应用程序按照主题维度进行订阅和发布.
Partition: 有时候又称Topic-Partition主题分区, kafka将消息主题细分为多个分区, 每个消息在发送到主题时, 会选择某一个分区发送, 每一个消息只能到一个分区, 每个分区存储不同的消息. 每个消费者在消费的时候也会指定需要消费的分区信息.
Record: 消息记录, 具体的消息信息, 一般包含消息主题、消息分区、消息Key和消息Value, 新版本还包含一个时间戳

Kafka通过分区实现了消息的多副本保存以及伸缩性, 同一个主题分区的副本消息会尽可能保存在不同的服务器实例上, 用于达到某个服务器实例崩坏, 分区数据依然可用的目的. 一般的主题都会有多个分区, 不同的消息落到不同分区, 这样消费者端可以并行消费, 极大提高性能. 而且每一个分区的消息可以保证顺序性, 先发送到分区的消息将先消费, 可以很好的适配某些需要顺序性处理的业务.

服务器Broker
Broker: kafka服务器, 每一个broker就是一个kafka服务器实例, 可以部署多个broker组建成kafka集群.
每一个Broker负责接收来自于生产者Producer的消息请求, 并持久化到本地磁盘, 同时响应消费者Consumer的消费请求, 将消息传递给消费者端.
多个Broker可以组成集群, 整个集群会挑选一个Broker作为集群控制器, 用于分配分区以及监控其他Broker. 为了达到这个效果, 每个Broker将接收其他Broker的消息同步请求, 并将消息分区数据同步给其他Broker, 如果作为集群控制器的Broker异常, 其他Broker会接管并执行相同的工作. 每一个主题分区都会有一个broker作为leader节点, 其他broker作为备份节点, 该分区所有的消息生产和消费都会通过leader节点完成, 其他备份节点仅从leader节点同步分区数据.

生产者Producer和消费者Consumer
Producer: 生产者, 用于构建消息、对消息进行一定的处理后(如压缩)发送到kafka服务器中.
Consumer: 消费者, 从kafka服务器中获取消息, 并进行业务逻辑处理
Consumer Group: 消费者组, 每一个消费者都隶属于一个消费者组, 每个消费者组包含多个消费者. 同一个消费者组下的消费者将会按照一定策略分配分区信息, 比如轮询策略. 这样消费者组下可以根据分区信息横向扩展更多的消费者实例, 提高整体系统吞吐量, 消费者组也保证了同一个分区只会被组下的一个消费者消费.
通常情况生产者会尽可能将同一个主题的消息均衡分配到不同的分区上, 我们也可以指定某个消息到特定的分区, 通过实现自定义的分区分配策略, 我们可以最大化满足自己的业务需求.?

选择kafka的理由

多生产者和多消费者
kafka设计成单个主题支持多生产者的方式且在多分区模式下支持多个消费者同时消费, 极大的提高整体消息处理并发性. 生产者可以根据吞吐量实时的增加节点数, 而且消费端不用关心消息来自于具体哪个生产者, 每个生产者会统一按照主题的规则进行消息发送到服务器. kafka消费者采用pull的模式, 使得kafka可以支持多消费者模式, 同一个消息可以被多个消费者消费, 这样可以满足不同业务对同一个消息处理的并行需求. 而且我们可以通过消费者组限制单个消息在同一组内只能被一个消费者消费, 来满足同一消息单次消费的场景. 根据消息的分区数和具体消费者的性能, 我们可以设置合理的消费者数量来达到最高的并发消费性能.?

高性能高吞吐量
分区除了在上面提到的可以扩展生产者和消费者来提高并发性, 最终达到更好的性能点. kafka在broker端也对分区进行了满足高性能高吞吐量的优化设计. broker可以水平扩展成集群, 根据需要可以创建几十上百的Broker集群, kafka会把消息分区尽可能均衡的分布到所有分区, 让整个系统更加高效运转. 当一个主题创建分区时, 每个分区的leader节点也会尽可能座落到不同的broker, 这样保证每个主题消息的消费更加分散并行化, 进而大大提高吞吐量.

除了分区设计带来的高并发性, kafka支持通过批量和压缩消息来提高整个网络的利用率. 生产者可以指定压缩类型, 所有发送的消息都会经过对应的压缩算法进行压缩后发送. 为了更加的高效, kafka在发送前还会将消息进行批量组装, 每次发送前都是将多个消息一起压缩后再发送, 极大的减少带宽占用. 服务器端在接收到压缩后的消息, 不需要进行解压缩, 只会按照压缩后原始存在磁盘中, 而后再消费者的请求中将压缩后的消息发给消费者, 消费者再采用同样的压缩算法进行解压.

高可靠性
kafka经过多分区冗余, 保证同样的数据存在于多个broker的副本中, 当某个broker失效后, 数据和功能依然可用. 生产者在发送消息到broker时, 指定ack方式为all且消息有多个副本时, 服务器会在消息同步到所有副本后再返回给生产端, 这样保证了消息一旦发送成功, 数据会在服务器同时存在多份, 不担心发送到leader broker后, 副本还未同步就挂掉带来的数据丢失风险. 结合上面提到的生产者、消费者和Broker服务器均能横向扩展, kafka能够降低服务不可用的概率, 保证了系统高效运行.

顺序性、持久化和消息回溯
kafka针对单个分区提供了顺行性, 生产者先发送到kafka分区的消息会优先被该分区的消费者消费, 在某些特定需要顺序性的场景下可以很好的用到这个功能. kafka将数据顺序写入磁盘, 并且可以保存一段时间(也可以长久保存). kafka消费端通过offset标记某个kafka消费到某个分区的位置, 可以通过重制kafka的消费偏移量offset来回溯消息.

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:18:18  更:2021-08-09 10:20:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 20:16:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码