目录

一、kafka简介

1.1、概述

1.2、消息系统介绍

1.3、点对点消息传递模式

1.4、发布-订阅消息传递模式

二、kafka术语解释

2.1、结构概述

2.2、broker

2.3、topic

2.4、producer

2.5、consumer

2.6、consumer group

2.7、leader

2.8、follower

2.9、partition

2.10、offset

2.11、replica

2.12、message

2.13、zookeeper

三、kafka架构

四、kafka的部署

4.1、软件下载

4.1.1、jdk的安装

4.1.2、zookeeper安装

4.1.3、kafka的安装

4.2、单机模式

4.3、集群部署

4.3.1、针对每一个节点的hosts文件添加节点的ip映射信息

4.3.2、时间同步

4.3.3、zookeeper配置 

4.3.4、创建对应的服务id

4.3.5、zoo.cfg参数解析

4.3.6、集群kafka配置


一、kafka简介

1.1、概述

kafka是由linkedin公司开发,是一个分布式、分区、多副本、多生产者、多消费者,基于zookeeper的分布式 日志系统(也可以作为MQ系统),常见可以用于web/nginx日志、访问日志、消息服务等,Linkedin2010年将项目贡献给了Apache基金会并成为顶级开源项目。
主要应用场景是:日志收集系统和消息详细。
设计目标如下:
1. 一时间复杂度为O(1)的方式提供消息持久能力,即使对TB级以上的数据也能保证常数时间的访问性能。
2. 高吞吐率:即使在非常廉价的商用机器上也能做到单机支持每秒100k条消息的传输。
3. 支持Kafka Server间的消息分布,以及分布式消费,同时保证每个partition内的消息顺序传输。
4. 同时支持离线数据和实时数据处理。
5. Scale out:支持在线水平扩展。

1.2、消息系统介绍

一个消息系统负责将数据从一个应用传递到另外一个应用,应用只需要关注数据,无需要关系数据再两个或者 多个应用间是如何传递的。分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消 息,有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。
kafka无疑也是一种消息订阅模式的系统。

1.3、点对点消息传递模式

在点对点消息系统中,消息持久化到一个队列中。此时,将有一个或多个消费队列中的数据。但是一条消息只 能被消费一次,当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。该模式及时有多 个消费者同时消费数据,也能保证数据处理的顺序,架构示意图如下

1.4、发布-订阅消息传递模式

在该模式中,消息呗持久化到一个topic中。与点对点消息系统不同的是,消费者可以订阅一个或者多个 topic,消费者可以消费topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除。在该模式下,消息的生产者称为发布者,消费者称为订阅这,架构示意图如下:

二、kafka术语解释

2.1、结构概述

上图中一个topic配置了3partitionPartition1有两个offset01Partition24offsetPartition31个offset。副本的id和副本所在的机器的id恰好相同。
如果一个topic的副本数为3,那么Kafka将在集群中为每个partition创建3个相同的副本。集群中的每个broker存储一个或多个partition。多个producerconsumer可同时生产和消费数据。

2.2、broker

一台Kafka服务器就是一个Broker,一个集群由多个Broker组成,一个Broker可以容纳多个TopicBroker和Broker之间没有MasterStandy的概念,他们之间的地位基本是平等的。
Kafka集群包含一个或者多个服务器,服务器节点成为broker
broker存储topic的数据,如果某topicNpartion,集群有Nbroker
broker存储topic的数据。如果某topicNpartition,集群有Nbroker,那么每个broker存储该topic的一个partition
如果某topicNpartition,集群有(N+M)broker,那么其中有Nbroker存储该topic的一个partition,剩下的Mbroker不存储该topicpartition数据。
如果某topicNpartition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个 partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡。

2.3、topic

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
类似于数据库的表名。

2.4、producer

topic中的数据分割为一个或多个partition。每个topic至少有一个partition。每个partition中的数据使用多个 segment文件存储。partition中的数据是有序的,不同partition间的数据丢失了数据的顺序。如果topic有多个partition,消费数据时就不能保证数据的顺序。在需要严格保证消息的消费顺序的场景下,需要将partition数目设为1

2.5、consumer

消费者可以从broker中读取数据。消费者可以消费多个topic中的数据。

2.6、consumer group

每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定groupname则属于默认的group)。

2.7、leader

每个partition有多个副本,其中有且仅有一个作为LeaderLeader是当前负责数据的读写的partition

2.8、follower

Follower跟随Leader,所有写请求都通过Leader路由,数据变更会广播给所有FollowerFollowerLeader保持数据同步。如果Leader失效,则从Follower中选举出一个新的Leader。当FollowerLeader挂掉、卡住或者同步太慢,leader会把这个follower“in sync replicas”ISR)列表中删除,重新创建一个Follower

2.9、partition

为了实现可扩展性,一个非常大的Topic可以被分为多个Partion,从而分布到多台Broker上。Partion中的每条消息都会被分配一个自增Id(Offset)Kafka只保证按一个Partion中的顺序将消息发送给消费者,但是不保证单个Topic中的多个Partion之间的顺序。

2.10、offset

消息在TopicPartion中的位置,同一个Partion中的消息随着消息的写入,其对应的Offset也自增,结构图如下:

2.11、replica

副本。TopicPartion含有Nreplica,N为副本因子。其中一个ReplicaLeader,其他都为Follower,Leader处理Partition的所有读写请求,与此同时,Follower会定期去同步Leader上的数据。

2.12、message

通讯的基本单位,消息

2.13、zookeeper

存放Kafka集群相关元数据的组件。在ZK集群中会保存Topic的状态消息,例如分区的个数,分区的组成,分区的分布情况等;保存Broker的状态消息;报错消费者的消息等。通过这些消息,Kafka很好的将消息生产,消息存储,消息消费的过程结合起来。

三、kafka架构

Kafka集群中生产者将消息发送给以Topic命名的消息队列Queue中,消费者订阅发往以某个Topic命名的消息队列Queue中的消息。其中Kafka集群由若干个Broker组成,Topic由若干个Partition组成,每个Partition里面的消息通过Offset来获取。
一个典型的Kafka集群中包含若干个Producer(可以是某个模块下发的Command,或者是Web前端产生的 PageView,或者是服务器日志,系统CPU,Memor),若干个BrokerKafka集群支持水平扩展,一般Broker数量越多,整个Kafka集群的吞吐率也就越高),若干个ConsumerGroup, 以及一个Zookeeper集群。Kafka通过zookeeper管理集群配置。Producer使用Push模式将消息发不到Broker上,consumer使用Pull模式从Broker上订阅并消费消息。

四、kafka的部署

4.1、软件下载

无论单机部署还是集群,这一步都不能省

4.1.1、jdk的安装

由于带GUI界面的安装,是自带jdk版本的,我们可以选择使用默认jdk
自带JDK,这种JDK可以使用java -version检查,如果使用javac就不行了,所以进行安装sudo yum install java-1.8.0-openjdk-devel -y

4.1.2、zookeeper安装

Apache ZooKeeper

选择3.5.7版本

上传服务器,安装

解压
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
mv apache-zookeeper-3.5.7-bin zookeeper3.5.7
mv zookeeper3.5.7/ /opt创建软链接
ln -s /opt/zookeeper3.5.7/ /opt/zookeeper配置环境变量
vim /etc/profile添加
export ZK_HOME=/opt/zookeeper
export PATH=$PATH:$ZK_HOME/binsource /etc/profile将Zookeeper提供的配置文件复制一份,复制成Zookeeper默认寻找的文件
cd /opt/zookeeper/conf
ls
cp zoo_sample.cfg zoo.cfg
cd ..创建数据存放目录
mkdir data
chmod 755 /opt/zookeeper/data修改数据存放位置
cd conf/
vim zoo.cfg##修改以下配置
dataDir=/opt/zookeeper/data启动 Zookeeper,Zookeeper的bin目录下
cd ..
./bin/zkServer.sh start zoo.cfg

检测zookeeper是否正常

jps # 看到控制台成功输出 QuorumPeerMain,表示启动成功./bin/zkServer.sh status zoo.cfg ## Mode: standalone表示ok

4.1.3、kafka的安装

 https://kafka.apache.org/downloads

选择 kafka_2.12-3.8.0.tgz 进行下载,Scala 2.12 和 Scala 2.13 主要是使用Scala编译的版本不同,两者皆可

上传服务器,安装

解压
tar -zxvf kafka_2.12-2.7.0.tgz
mv kafka_2.12-2.7.0 /opt
cd /opt创建软链接
ln -s /opt/kafka_2.12-2.7.0/ /opt/kafka
ls配置环境变量
vim /etc/profile添加
export KAFKA_HOME=/opt/kafka
export PATH=:$PATH:${KAFKA_HOME}source /etc/profile

4.2、单机模式

在Kafka的config目录下存在相关的配置信息——本次我们只想让Kafka快速启动起来只关注server.properties文件即可cd ${KAFKA_HOME}/config
ls
#connect-console-sink.properties    connect-file-source.properties   consumer.properties  server.properties
#connect-console-source.properties  connect-log4j.properties         kraft                tools-log4j.properties
#connect-distributed.properties     connect-mirror-maker.properties  log4j.properties     trogdor.conf
#connect-file-sink.properties       connect-standalone.properties    producer.properties  zookeeper.properties打开配置文件,并主要注意以下几个配置
vim server.propertiesbroker.id=0 #kafka服务节点的唯一标识,这里是单机不用修改
#     listeners = PLAINTEXT://host1:9092  别忘了设置成自己的主机名
listeners=PLAINTEXT://host1:9092 #kafka底层监听的服务地址,注意是使用主机名,不是ip。
# log.dirs 指定的目录 kafka启动时可以自动创建,因此不要忘了让kafka可以有读写这个目录的权限。
log.dirs=/opt/kafka/data ##kafka的分区以日志的形式存储在集群中(其实就是broker数据存储的目录)log.retention.hours=168 #日志的留存策略,默认168小时也就是一周
# zookeeper 的连接地址 ,别忘了设置成自己的主机名,单机情况下可以使用 localhost
zookeeper.connect=host1:2181

启动kafka

./bin/kafka-server-start.sh -daemon config/server.properties #后台启动kafka使用 jps 查看是否成功启动kafka
jps
34843 QuorumPeerMain
21756 Jps
116076 Kafka

4.3、集群部署

4.3.1、针对每一个节点的hosts文件添加节点的ip映射信息

vim  /etc/hosts
192.168.157.80 host1
192.168.157.81 host2
192.168.157.82 host3

4.3.2、时间同步

yum install ntp -y
ntpdate cn.pool.ntp.org | ntp[1-7].aliyun.com #两个时钟同步地址选择一个就行

4.3.3、zookeeper配置 

vim /opt/zookeeper/conf/zoo.cfg
##额外添加以下配置
server.1=host1:2888:3888 #数据同步端口:领导选举时服务器监听的端口
server.2=host2:2888:3888
server.3=host3:2888:3888

4.3.4、创建对应的服务id

# host1
echo 1 > /opt/zookeeper/data/myid #在这个文件中写入自己服务的id号
# host2
echo 2 > /opt/zookeeper/data/myid
# host3
echo 3 > /opt/zookeeper/data/myid

4.3.5、zoo.cfg参数解析

tickTime=2000: 通信心跳数,用于设置Zookeeper服务器与客户端之间的心跳时间间隔,单位是毫秒。这个时间间隔是Zookeeper使用的基本时间单位,用于服务器之间或客户端与服务器之间维持心跳的时间间隔。initLimit=10: LF初始通信时限,用于设置集群中的Follower跟随者服务器与Leader领导者服务器之间启动时能容忍的最多心跳数。如果在这个时限内(10个心跳时间)领导和根随者没有发出心跳通信,就视为失效的连接,领导和根随者彻底断开。syncLimit=5: LF同步通信时限,用于设置集群启动后,Leader与Follower之间的最大响应时间单位。假如响应超过这个时间(syncLimit * tick Time -> 10秒),Leader就认为Follower已经死掉,会将Follower从服务器列表中删除。dataDir: 数据文件目录+数据持久化路径,主要用于保存Zookeeper中的数据。dataLogDir: 日志文件目录,用于存储Zookeeper的日志文件。clientPort=2181: 客户端连接端口,用于监听客户端连接的端口

4.3.6、集群kafka配置

 server.properties配置文件

cd ${KAFKA_HOME}/config
vim server.propertiesbroker.id=0 #kafka服务节点的唯一标识
#     listeners = PLAINTEXT://your.host.name:9092  别忘了设置成自己的主机名
listeners=PLAINTEXT://host1:9092 #集群中需要设置成每个节点自己的
# log.dirs 指定的目录 kafka启动时可以自动创建,因此不要忘了让kafka可以有读写这个目录的权限。
log.dirs=/opt/kafka/data ##kafka的分区以日志的形式存储在集群中(其实就是broker数据存储的目录)
# The minimum age of a log file to be eligible for deletion due to age
log.retention.hours=168 #日志的留存策略,默认168小时也就是一周
# zookeeper 集群的连接地址 
zookeeper.connect=host1:2181,host2:2181,host3:2181

其余配置:

##修改差异配置
cd ${KAFKA_HOME}/config
vim server.properties# host2节点
broker.id=1
listeners=PLAINTEXT://host2:9092
# host3节点
broker.id=2
listeners=PLAINTEXT://host3:9092

 kafka集群即可正常启动

kafka其余命令./bin/kafka-server-stop.sh #关闭kafka
kafka-console-consumer.sh #消费命令
kafka-console-producer.sh #生产命令
kafka-consumer-groups.sh #查看消费者组,重置消费位点等
kafka-topics.sh #查询topic状态,新建,删除,扩容
kafka-acls.sh #配置,查看kafka集群鉴权信息
kafka-configs.sh #查看,修改kafka配置
kafka-mirror-maker.sh #kafka集群间同步命令
kafka-preferred-replica-election.sh #重新选举topic分区leader
kafka-producer-perf-test.sh #kafka自带生产性能测试命令
kafka-reassign-partitions.sh #kafka数据重平衡命令
kafka-run-class.sh #kafka执行脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89711.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89711.shtml
英文地址,请注明出处:http://en.pswp.cn/web/89711.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小语种OCR识别技术实现原理

小语种OCR(光学字符识别)技术的实现原理涉及计算机视觉、自然语言处理(NLP)和深度学习等多个领域的融合,其核心目标是让计算机能够准确识别并理解不同语言的印刷或手写文本。以下是其关键技术实现原理的详细解析&#…

GPT:让机器拥有“创造力”的语言引擎

当ChatGPT写出莎士比亚风格的十四行诗,当GitHub Copilot自动生成编程代码,背后都源于同一项革命性技术——**GPT(Generative Pre-trained Transformer)**。今天,我们将揭开这项“语言魔术”背后的科学原理!…

LeetCode|Day19|14. 最长公共前缀|Python刷题笔记

LeetCode|Day19|14. 最长公共前缀|Python刷题笔记 🗓️ 本文属于【LeetCode 简单题百日计划】系列 👉 点击查看系列总目录 >> 📌 题目简介 题号:14. 最长公共前缀 难度:简单…

安全事件响应分析--基础命令

----万能密码oror1 or # 1or11 1 or 11安全事件响应分析------***windoes***------方法开机启动有无异常文件 【开始】➜【运行】➜【msconfig】文件排查 各个盘下的temp(tmp)相关目录下查看有无异常文件 :Windows产生的 临时文件 可以通过查看日志且通过筛…

基于C#+SQL Server实现(Web)学生选课管理系统

学生选课管理系统的设计与开发一、项目背景学生选课管理系统是一个学校不可缺少的部分,传统的人工管理档案的方式存在着很多的缺点,如:效率低、保密性差等,所以开发一套综合教务系统管理软件很有必要,它应该具有传统的…

垃圾回收(GC)

内存管理策略,在业务进程运行的过程中,由垃圾收集器以类似守护协程的方式在后台运行,按照指定策略回收不再被使用的对象,释放内存空间进行回收 优势: 屏蔽内存回收的细节:屏蔽复杂的内存管理工作&#xff0…

Datawhale AI夏令营-机器学习

比赛简介 「用户新增预测挑战赛」是由科大讯飞主办的一项数据科学竞赛,旨在通过机器学习方法预测用户是否为新增用户 比赛属于二分类任务,评价指标采用F1分数,分数越高表示模型性能越好。 如果你有一份带标签的表格型数据,只要…

Spring IOC容器在Web环境中是如何启动的(源码级剖析)?

文章目录一、Web 环境中的 Spring MVC 框架二、Web 应用部署描述配置传统配置(web.xml):Java配置类(Servlet 3.0):三、核心启动流程详解1. 启动流程图2. ★容器初始化入口:ContextLoaderListene…

18个优质Qt开源项目汇总

1,Clementine Music Player Clementine Music Player 是一个功能完善、跨平台的开源音乐播放器,非常适合用于学习如何开发媒体类应用,尤其是跨平台桌面应用。它基于 Qt 框架开发,支持多种操作系统,包括 Windows、macO…

计算机视觉:AI 的 “眼睛” 如何看懂世界?

1. 什么是计算机视觉:让机器 “看见” 并 “理解” 的技术1.1 计算机视觉的核心目标计算机视觉(CV)是人工智能的一个重要分支,它让计算机能够 “看懂” 图像和视频 —— 不仅能捕捉像素信息,还能分析内容、提取语义&am…

华为OD刷题记录

华为OD刷题记录 刷过的题 入门 1、进制 2、NC61 doing 订阅专栏

QT学习教程(二十五)

双缓冲技术&#xff08;Double Buffering&#xff09;&#xff08; 2、公有函数实现&#xff09;#include <QtGui> #include <cmath> using namespace std; #include "plotter.h"以上代码为文件的开头&#xff0c;在这里把std 的名空间加入到当前的全…

设计模式笔记_结构型_装饰器模式

1.装饰器模式介绍装饰器模式是一种结构型设计模式&#xff0c;允许你动态地给对象添加行为&#xff0c;而无需修改其代码。它的核心思想是将对象放入一个“包装器”中&#xff0c;这个包装器提供了额外的功能&#xff0c;同时保持原有对象的接口不变。想象一下&#xff0c;你有…

day25 力扣90.子集II 力扣46.全排列 力扣47.全排列 II

子集II给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也可以视作递增序列的一种特殊情况。示例 1&…

Solidity 中的`bytes`

在 Solidity 中&#xff0c;bytes 和 bytes32 都是用来保存二进制数据的类型&#xff0c;但它们的长度、使用场景、Gas 成本完全不同。✅ 一句话区分类型一句话总结bytes32定长 32 字节&#xff0c;适合做哈希、地址、标识符等固定长度数据。bytes动态长度字节数组&#xff0c;…

初学者STM32—PWM驱动电机与舵机

一、简介 上一节课主要学习了输出比较和PWM的基本原理和结构&#xff0c;本节课就主要以实践为主通过STM32最小系统板和驱动器控制舵机和直流电机。 上一节课的坐标 初学者STM32—输出比较与PWM-CSDN博客 二、舵机 舵机是一种根据输入PWM信号占空比来控制输出角度的装置 输…

C++中的异常处理机制:try-catch

一、基本概念 异常&#xff08;Exception&#xff09;&#xff1a;程序执行过程中发生的非正常情况&#xff0c;比如除以零、访问越界、内存不足等。 异常处理&#xff08;Exception Handling&#xff09;&#xff1a;对异常情况进行捕获、分析&#xff0c;并采取补救措施&…

如何从 Windows 11 或 10 远程访问 Ubuntu 24.04 或 22.04 桌面

了解如何使用 RDP(远程桌面协议)从 Windows 11 或 10 远程连接 Ubuntu 24.04 Noble 或 22.04 LTS Jammy JellyFish 桌面的步骤。 Windows 提供了一个便捷的功能,称为远程桌面连接,它使用 RDP 协议来远程连接 PC。当从 Windows 系统建立远程桌面连接时,使用起来非常简单,…

Linux 服务器中,Tab 键自动补全功能失效

在 Linux 服务器中&#xff0c;Tab 键自动补全功能失效通常与 bash-completion 组件缺失或配置异常有关。以下是解决问题的两个关键 YUM 指令及操作步骤&#xff1a;1. 安装 bash-completion 组件 sudo yum install -y bash-completion说明&#xff1a; bash-completion 是提供…

SpringBoot服装推荐系统实战

Spring Boot 服装推荐系统实例 以下是基于Spring Boot实现的服装推荐系统的30个实例代码示例,涵盖核心功能和实现方法。 用户注册与登录功能 @RestController @RequestMapping("/api/auth") public class AuthController {@Autowiredprivate UserService userSer…