大数据课程I2——Kafka的架构

文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州

 ▲ 本章节目的

⚪ 掌握Kafka的架构;

⚪ 掌握Kafka的Topic与Partition;

一、Kafka核心概念及操作

 

1. producer生产者,可以是一个测试线程,也可以是某种技术框架(比如flume)。

2. producer向kafka生产数据,必须指定向哪个主题去生产数据。

3. 主题topic,主题是由用户(程序员)自己来创建的。

4. 创建主题的指令:

sh kafka-topics.sh --create ---zookeeper hadoop01:2181

--replication-factor 1 --partitions 1 --topic enbook

5. 查看kafka集群的所有主题:

sh kafka-topics.sh --list --zookeeper hadoop01:2181

6. 创建一个主题,需要指定:

①主题名

②主题的分区数量

③分区的副本数量

7. 主题的分区:本质上就是一个分区文件目录。

分区目录的命名规则:主题名 - 分区编号(分区编号从0开始)。

思考:kafka主题引入分区机制的作用?

回答:可以分布式的对一个主题的数据进行存储和管理。

补充:主题的分区数量可以远大于kafka broker 服务器数量。kafka底层尽可能确保分区目录的负载均衡。比如:一个主题有10个分区,有3个broker服务器,则分区目录的数量分配:3-3-4。

8. 启动一个生产者线程。

sh kafka-console-producer.sh --broker-list

hadoop01:9092, hadoop02:9092, hadoop03:9092 --topic enbook

9. producer向kafka指定的主题生产数据,数据最终是存到了分区目录下的log文件中。此外kafka底层会确保每个分区目录的数据达到负载均衡的效果(轮询发送给每个分区目录)。

10. Kafka支持数据的容错机制,即分区数据丢失后,可以恢复。通过副本冗余机制来实现的。即我们在创建主题时,可以指定每个分区有多个副本。

补充:如果出现kafka创建主题分区异常。主要检查zookeeper状态。

sh /home/software/zookeeper-3.4.8/bin/zkServer.sh status

如果报错:Error Start,查看zookeeper.out文件。

11. 分区的副本机制,是为了数据容错。

sh kafka-topics.sh --create --zookeeper hadoop01:2181

--replication-factor 2 --partitions 1 --topic frbook

补充:

①分区副本的数量不能broker服务器数量。

②分区的副本数不宜过多。副本数量越多,集群磁盘的利用率越低。比如3副本,集群利用率就只有33%。

在实际生产环境下,一般3个副本足够了,2个副本也可以。如果是1个副本则没有容错机制,所有一般需要2个或3个副本即可。

综上,Kafka最基础和核心的概念就是topic主题。因为无论是向kafka生产数据,还是从kafka消费数据,都需要指定主题。

主题topic的属性:

①主题名 topic name

②分区数量 partition

③分区的副本数量 replication

12. 从kafka消费数据,消费者可以是一个测试线程,也可以是某种技术框架(Spark,Flink)。

sh kafka-console-consumer.sh --zookeeper hadoop01:2181

--topic enbook --from-beginning

13. kafka的特点:kafka的数据无论消费与否,会一直存在,不会删除。

14. 在调用kafka相关指令时,如果涉及到zookeeper的,写一台即可。如果涉及kafka的,有几个写几个。

二、Kafka主题分区的副本相关补充

 1. kafka是有Leader和Follower概念的,注意:是针对分区的副本而言的,不是针对broker来说的。kafka集群,broker没有主从之分。

2. 分区的副本Leader的作用:无论是生产数据还是消费数据,都是和分区副本的Leader交互的。

3. 如果分区副本的Leader挂掉了,Kafka会从剩余的Follower中选出新Leader。

三、Kafka架构

1. Kafka拓扑结构

1.producer:

消息生产者,发布消息到 kafka 集群的终端或服务。

2.broker:

kafka 集群中包含的服务器。broker (经纪人,消费转发服务)

3.topic:

每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。

4.partition:

partition 是物理上的概念,每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。

5.consumer:

从 kafka 集群中消费消息的终端或服务。以一个测试线程也可以是某种技术框架(Spark和Flink)。

6.Consumer group:

high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被 consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。

即组间数据是共享的,组内数据是竞争的。

7.replica:

partition 的副本,保障 partition 的高可用。

副本数量不宜过多,因为降低进群磁盘的利用率。

比如3副本,磁盘利用率1/3.

8.leader:

replica 中的一个角色, producer 和 consumer 只跟 leader 交互。

9.follower:

replica 中的一个角色,从 leader 中复制数据。

10.controller:

kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。

11.zookeeper:

kafka 通过 zookeeper 来存储集群的 meta 信息。负责管理和监控Kafka集群运行(临时节点+监听机制),包括存储一些元数据信息(比如主题名,主题的分区数,分区的副本数,副本Leader的位置信息,Controller位置等)。

2. 核心APIs

Producer API:也叫做生产者API,应用程序通过这些API可以发布记录的数据流到一个或多个topic上。

Consumer API:消费者API,应用程序可以通过消费者API订阅一个或多个topic上的记录,并对这些记录进行处理。

Streams API:通过调用Streams API,应用程序可以对一个或多个Topic上的记录进行转换处理,同时将处理后的记录发布到一个或多个Topic上。

Connector API:通过Connector API可以构建和运行可重用的生产者和消费者,能够把topic连接到现有的应用程序或数据库。比如,一个数据库连接器可以捕获每个表的变化。

kafka客户端与服务端的通信是基于一个简单的、高性能的、语言无关的TCP协议。这个协议是向下兼容的。我们提供了一个java语言的客户端,并且还有很多语言版本的客户端。

3. Kafka集群结构

分布式(distribution)

Partition分布在kafka集群的服务器上,每个分区配置一定数量的副本在集群服务器上提供容错能力,每个服务器会共享分区进行数据请求的处理。

每个分区都有一个对应的“leader”服务器,同时具有0个或多个“followers”服务器。leader服务器处理分区上的所有读写请求,follower服务器被动的复制leader服务器上的数据。如贵leader失败了,其中一个follower将自动变成leader。每个服务器都会从当分布在其上的分区的某些分区的领导则,而其他分区会在follower服务器上均匀分布。

生产者(producers)

生产者将数据发布到他选择的topic中,生产者负责指定将数据发送到topic中的那个partition上。可以通过简单的循环方式来实现负载均衡,也可以通过一些复杂的语义算法来实现(例如:根据记录中的一些Key)。

消费者(consumers)

每个消费者都隶属于某个消费群,每个发布到topic的记录都会被发送给一个订阅消费者组中的一个消费者实例上。消费则实例可以是一个单独的进程也可以是单独的一台机器。

如果所有的消费者实例都属于同一个消费者组,那么记录将被均匀的发送给消费者实例。

如果消费者实例在不同的消费群中,那么记录将被广播给所有的消费者进程。

如上图,两台服务器的kafka集群上分布四个partition(P0-P3),两个消费群,消费群A有两个消费者实例,消费群B有四个

四、Topic与Partition

1. 基础概念:

 

如上图所示,像一个主题生产数据。数据最终是存储到哥哥分区中。

分区从逻辑上来看,实际上是一个队列。

分区从物理上来看,实际上是一个分区目录。

向分区中存储数据,最终是存到的分区目录下的log文件中。

 

底层实际上是数据磁盘的顺序写操作(往文件末尾追加),所以Kafka的写入性能较高。

如上图所示,从分区中消费数据。Kafka底层有一个offset机制。

Kafka会记录消费者的offset(消费的位置偏移量),便于下一次从正确的位置进行消费。

Kafka记录offset分为两个版本:

旧版本:Kafka是将offset存到zookeeper上的。存在的问题是:会频繁的和zookeeper进行通信交互,即可能会为Zookeeper带来较高的访问负载。

新版本:Kafka自己来管理offset,以消费者组为单位进行管理。

2. 验证思路:

1. 启动一个消费者线程(需要带有消费者属性)

sh kafka-console-consumer.sh --bootstrap-server

hadoop01:9092,hadoop02:9092,hadoop03:9092 --topic enbook

--from-beginning --new-consumer

2. 会发现多出一些目录

__consumer_offsets-11

__consumer_offsets-14

__consumer_offsets-17

3. 即Kafka底层是通过一个主题来进行管理的。

主题名是__consumer_offsets,分区是50个。

__consumer_offsets-0

__consumer_offsets-49

4. 某个消费者组的offset就存在这个50个分区目录中的其中一个中。

存储位置规则:groupId.hashcode%50= 取余结果就是对应的分区目录。

sh kafka-consumer-groups.sh --bootstrap-server

hadoop01:9092,hadoop02:9092,hadoop03:9092 --list --new-consumer

3. Topic和Partition的关系

Topic

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic(主题)。

Partition

Parition是物理上的概念,每个Topic包含一个或多个Partition.。

Topic在逻辑上可以被认为是一个queue,每条消息都必须指定它的Topic,可以简单理解为必须指明把这条消息放进哪个queue里。

为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。若创建topic1和topic2两个topic,且分别有13个和19个分区,如下图所示。

因为每条消息都被append到该Partition中,属于顺序写磁盘,因此效率非常高(经验证,顺序写磁盘效率比随机写内存还要高,这是Kafka高吞吐率的一个很重要的保证)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/71524.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

80. 删除有序数组中的重复项 II

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路:因为数组有序,相等的元素一定相邻,所以可以使用一个变量num统计相等元素的个数,如果当前元素和前一个元素相等&#xff0c…

Java解决四大查找(一)

Java解决四大查找 一.线性查找1.1 题目1.2 思路分析1.3 代码演示 二.二分查找(双指针法)2.1 题目2.2 思路分析(图解加文字)2.3 代码演示 一.线性查找 1.1 题目 在数组{1,8,1024,521,1889}中查找数字8,如果有&#xff…

31 | 独角兽企业数据分析

独角兽企业:是投资行业尤其是风险投资业的术语,一般指成立时间不超过10年、估值超过10亿美元的未上市创业公司。 项目目的: 1.通过对独角兽企业进行全面地分析(地域,投资方,年份,行业等),便于做商业上的战略决策 项目数据源介绍 1.数据源:本项目采用的数据源是近…

智能质检技术的核心环节:语音识别和自然语言处理

随着呼叫中心行业的快速发展和客户服务需求的不断提高,越来越多的企业开始采用智能质检技术,以提高呼叫中心的质量和效率。而在智能质检技术中,语音识别和自然语言处理是其核心环节,对于提高质检的准确性和效率具有重要作用。 语音…

uniapp使用阿里矢量库

然后解压复制全部到你的项目文件 最后只要这几个 然后引入 最后在你需要的页面使用

使用罗技鼠标后 弹出当前页面的脚本发生错误AppData/Local/Temp/LogiUI/Pak/js/jquery-1.3.2.min.js解决

使用的台式机,没有蓝牙驱动,在用logi无线鼠标时,把鼠标连接插入台式机后弹出的如上图所示这个提示,无论是点是/否,还是X掉上图提示,电脑右下角的图依然存在。不习惯这丫的存在。 我重启还是有,然…

MATLAB图论合集(一)基本操作基础

本帖总结一些经典的图论问题,通过MATLAB如何计算答案。近期在复习考研,以此来巩固一下相关知识——虽然考研肯定不能用MATLAB代码哈哈,不过在实际应用中解决问题还是很不错的,比C易上手得多~ 图论中的图(Graph&#xf…

docker中的jenkins之流水线构建

docker中的jenkins之流水线构建项目 1、用node这种方式(因为我用pipeline方式一直不执行,不知道为什么) 2、创建项目 创建两个参数,一个是宿主端口号,一个是docker中的端口号 3、使用git项目中的Jenkinsfile 4、编写…

Kafka:安装和配置

producer:发布消息的对象,称为消息产生者 (Kafka topic producer) topic:Kafka将消息分门别类,每一个消息称为一个主题(topic) consumer:订阅消息并处理发布消息的对象…

鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统 em

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目…

ShardingSphere简单介绍

此文章为笔记,为阅读其他文章的感受、补充、记录、练习、汇总,非原创,感谢每个知识分享者。 文章目录 第01章 高性能架构模式1、读写分离架构2、数据库分片架构2.1、垂直分片2.2、水平分片 3、读写分离和数据分片架构4、实现方式4.1、程序代…

【果树农药喷洒机器人】Part6:基于深度相机与分割掩膜的果树冠层体积探测方法

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

计算机竞赛 GRU的 电影评论情感分析 - python 深度学习 情感分类

1 前言 🔥学长分享优质竞赛项目,今天要分享的是 🚩 GRU的 电影评论情感分析 - python 深度学习 情感分类 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 这…

C++ STL vector 模拟实现

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C之STL &#x1f525;<3>创作者&#xff1a;我的代码爱吃辣 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<5>前言&#xff1a;上次我们已经数字会用…

Leetcode34 在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 代码&#xff1a; c…

若依-plus-vue启动显示Redis连接错误

用的Redis是windows版本&#xff0c;6.2.6 报错的主要信息如下&#xff1a; Failed to instantiate [org.redisson.api.RedissonClient]: Factory method redisson threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect t…

Vue中使用Tailwind css

1.什么是Tailwind 就是一个CSS框架&#xff0c;和你知道的bootstrap&#xff0c;element ui&#xff0c;Antd&#xff0c;bulma。一样。将一些css样式封装好&#xff0c;用来加速我们开发的一个工具。 Tailwind解释 tailwind css 中文文档 2.Vue使用Tailwind配置 1. 新建vu…

GB/T28181设备接入端如何应用到数字城管场景?

什么是数字城管&#xff1f; 数字城管&#xff0c;又称“数字化城市管理”或“智慧城管”&#xff0c;是一种采用信息化手段和移动通信技术来处理、分析和管理整个城市的所有城管部件和城管事件信息&#xff0c;促进城市管理现代化的信息化措施。 数字城管通过建立城市管理信息…

为什么String要设计成不可变的

文章目录 一、前言二、缓存hashcode缓存 三、性能四、安全性五、线程安全 一、前言 为什么要将String设计为不可变的呢&#xff1f;这个问题一直困扰着许多人&#xff0c;甚至有人直接向Java的创始人James Gosling提问过。在一次采访中&#xff0c;当被问及何时应该使用不可变…

腾讯云COS的快速接入

背景 最近在研究一个剪贴板粘贴工具&#xff0c;实现粘贴图片&#xff0c;返回可访问的地址&#xff0c;这个在我的哔哩哔哩上有出一期视频&#x1f92d;。但是&#xff0c;我发现部分博客平台不能正常的转载我的图片链接&#xff0c;于是研究了一下腾讯云的COS&#xff08;阿…