栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Kafka架构体系

Kafka架构体系

目录

简述

诞生优势使用场景CAP 消息队列Kafka 相关概念Kafka 架构体系

Partition 架构体系Replica 架构体系Consumer Group 架构体系 参考

简述

Kafka 是由 Apache 软件基金会开发的一个开源的分布式流处理平台,由 Scala 和 Java 编写。

主要分为两部分功能:

发布订阅模式的消息队列:构造实时流数据管道,可以在系统或应用之间可靠地获取数据,一般用于系统间解耦、异步通信、削峰填谷等用途。Kafka Stream 实时在线流处理:构建实时流式应用程序,对这些流数据进行转换或者影响。 诞生

kafka 最初由 linkedin 公司开发,是为了解决 linkedin 的数据管道问题,起初 linkedin 采用了 ActiveMQ 来进行数据交换,那时的 ActiveMQ 远远无法满足 linkedin 对数据传递系统的要求,经常由于各种缺陷而导致消息阻塞或者服务无法正常访问,为了能够解决这个问题,linkedin 决定研发自己的消息传递系统。linkedin 于 2010 年将 Kafka 贡献给 Apache 基金会并成为顶级开源项目。

优势

高吞吐、低延时,即使是非常普通的硬件,也可以支持百万级的消息吞吐量。持久化存储,使用磁盘存储,通过 O(1) 的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的消息存储也能够保持长时间的稳定性能。高可扩展,通过对 Topic 进行分区,可以将消息数据存储到多个 Broker 节点,具备良好的扩展性高容错性,底层基于 Zookeeper,集群中任意一个 Broker 节点宕机,Kafka 依然可以对外提供服务。 使用场景

作为消息系统,与大多数消息系统比较,kafka 有更好的吞吐量,内置分区,副本和故障转移,这有利于处理大规模的消息。可替换传统消息系统,处理异步、解耦、削峰等业务场景日志聚合,从服务器中收集物理日志文件,并将它们放在中央位置(可能是文件服务器或HDFS)进行处理。事件采集,事件采集是一种应用程序的设计风格,其中状态的变化根据时间的顺序记录下来,kafka 支持这种非常大的存储日志数据的场景。指标监控,kafka 也常用于监测数据,将分布式应用程序生成的统计数据集中聚合。流处理 CAP

CAP 指一个分布式系统最多只能同时满足 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性)这三项中的两项。

一致性(C):保证所有节点在同一时间的数据完全一致。可用性(A):保证服务一直可用,而且是正常响应时间。分区容忍性(P):在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

Kafka 底层依赖 Zookeeper,所以也继承了 Zookeeper 的一致性特性,属于 CP 系统。

本系统只讲解 Kafka 作为消息队列的使用,Kafka Stream 不在范围内,后续会另起系列。

消息队列

消息队列有两种主要的消息传递模式:

点对点模式:同一条数据至多被消费一次,消费者消费完成后,数据会从队列中删除。

发布-订阅模式:同一条数据可以被多个消费者消费,数据被消费后不会立马删除。Kafka 使用的这种模式。

Kafka 相关概念

Producer:消息生产者,向 Kafka 发布消息的客户端。Consumer:消息消费者,负责消费 Kafka 中的消息。Message:消息,消息体由 键、值、时间戳 三部分组成。Broker:Kafka 实例,通常一台机器只安装一个实例,多个实例共同(也可以一个实例)组成 Kafka 集群。Topic:消息主题,逻辑概念,可以理解为消息队列的名称。消息的生产者与消费者面向的都是 Topic。Partition:Topic 分区,物理概念,一个 Topic 拥有多个 Partition,Topic 的数据实际存储在 Partition,Partition 是 Kafka 数据存储的基本单元,每一个 Partition 都是一个顺序的、不可变的消息队列。Replica:Partition 副本,每个 Partition 拥有多个 Replica,其中一个作为 Leader,其它的则作为 Follower,当 Leader 故障时则会选择一个 Follower 上位,成为 Leader。Leader:Partition 主分区,负责数据的读写。Follower:Partition 从分区,Leader 负责写入并广播给所有的 Follower,Follower 与 Leader 保持数据同步。Consumer Group:消费组,每个 Consumer 属于一个特定的 Consumer Group,同一个 Partition 的数据只能被消费组中的某一个消费者消费,同一个消费组的消费者可以消费同一个 topic 的不同分区的数据。 Kafka 架构体系 Partition 架构体系

Kafka 对 Topic 进行了分区,一个 Topic 拥有多个 Partition,生产者向 Topic 发送消息,消息根据一定的规则分配到 Partition,消息实际会存储到 Partition,每个 Partition 在物理上对应一个文件夹,该文件夹下存储这个 Partition 的所有消息和索引文件,Partition 是 Kafka 数据存储的基本单元。

每个 Partition 是顺序的、不可变的消息序列,新的消息不断追加到这个有组织的有保证的日志上。Partition 会给每个消息记录分配一个顺序号(偏移量),能够唯一标识该分区中的每条记录。

顺序性

Kafka 只能保证单个 Partition 内部有序,并不能保证 Topic 整体有序,如果希望 Topic 整体有序,要么设置 Topic 只有一个 Partition,要么设置 路由策略,让需要有序的消息路由到同一个 Partition。

数据保留策略

Kafka 使用硬盘存储消息,前文提到 发布-订阅模式 下,消息被消费并不会删除,但是磁盘大小有限制,不可能永久保留所有数据,因此 Kafka 提供两种可配置的策略删除旧数据

基于时间,默认一个星期基于 Partition 文件大小,默认 1G

Kafka 的性能跟存储的数据量的大小无关,所以将数据存储很长一段时间是没有问题的。

优势

高可扩展:可以通过扩展机器的方式轻松应对日益增长的数据量。
提高写入并发:如果一个 Topic 对应一个文件,那这个文件所在机器 I/O 将会成为这个 Topic 的性能瓶颈。有了 Partition,消息可以并行写入不同 Broker 的 Partition,极大的提高了吞吐率。
提高消费并发:多个消费者可以同时消费不同 Partition 中的消息,提高了消费处理效率。

Replica 架构体系

为保障数据安全性,Kafka 提供了副本机制。每个 Partition 拥有多个副本,其中一个作为 Leader 负责读写功能,其余作为 Follower 负责与 Leader 保持数据同步。当 Leader 发生故障时,Kafka 会在 Follower 中进行选举,重新选择 Leader,保障 Kafka 可用性。

如下图所示,Kafka 集群拥有三个 Broker,创建一个 Topic,设置拥有 3 个 Partition,3 个 Replica,3 个 Partition 分别命名为 P1、P2、P3,红色代表 Leader,绿色代表 Follower。

通常 Leader 与 Follower 会分布在不同的 Broker

Consumer Group 架构体系

消费者以消费组(Consumer Group)的名称来标识自己,消费组有两个重要特性:

同一个 Partition 的数据只能被消费组中的某一个消费者消费,防止消息被消费组中的不同消费者重复消费。同一个 Consumer Group 中的 Consumer 可以消费不同的 Partition 中的消息,提升消息端的吞吐量。

下图中,两个服务器的 Kafka 集群具有四个分区(P0-P3)和两个消费群。A消费群有两个消费者,B群有四个。

参考

https://kafka.apachecn.org/
https://www.orchome.com/kafka/index

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/706795.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号