zookeeper和Kafka消息队列群集部署

news/2024/9/14 2:21:13/ 标签: kafka, 分布式, linux, 服务器, 数据库

消息队列概念

什么是消息队列

  • 消息(Message)是指在应用间传送的数据
  • 消息队列(Message Queue)是一种应用间通信方式解决方法,确保消息的可靠传输

消息队列的特征

存储

将消息存储在某种类型的缓冲区中,直到目标进程读取这些消息或将其从消息队列中显式移除为止 

异步

消息队列通过缓冲消息可以在应用程序公开一定程度的异步性,允许源进程发送消息并在队列中累积消息,而目标进程则可以挑选消息进行处理

 为什么需要消息队列

  • 解耦
  • 冗余
  • 扩展性
  • 灵活性
  • 峰值处理能力
  • 可恢复性
  • 顺序保证
  • 异步通信

kafka基础概念

什么是kafka

  • Kafka是一种高吞吐量的分布式发布/订阅消息系统
  • kafka是Apache组织下的一个开源系统
  • 可以实时的处理大量数据以满足各种需求场景

kafka角色术语

角色概念
BrokerKafka集群包含一个或多个服务器,每个服务器被称为broker(经纪人)
Topic每条发布到Kafka集群的消息都有一个分类,这个级别被称为Topic(主题)
Producer指消息的生产者,负责发布消息到kafka broker
Consumer指消息的消费者,从kafka broker拉取消息,并消费这些已发布的消息
PartitionPartition是物理上的概念,每个Topic包含一个或多个Partition,每个Partition都是一个有序的队列。Partition中的每条消息都会被分配一个有序的id(offset)
Consumer Group消费者组,可给每个Consumer指定消费组,如果不知道消费组,则属于默认的消费组
Message消息,通信的基本单位,每个producer可以向一个topic发送一些消息

kafka拓扑架构

 zookeeper

基础概念

是一种分布式协调技术,所谓分布式协调技术主要是用来解决分布式环境当中多个进程呢之间的同步控制,让他们有序的去访问某种共享资源,防止造成资源竞争(脑裂)的后果

工作原理

master启动

各节点向ZooKeeper中注册节点信息,以编号最小算法选举出一个主节点,另外的节点就是备用节点,由zookeeper完成对两个Master进程的调度,和主、备节点的分配和协作

master故障

如果主节点A发生了故障,这时候如果它在ZooKeeper所注册的节点信息会被自动删除,并会再次发出选举

master恢复

如果主节点恢复了,它会再次向ZooKeeper注册自身的节点信息,但注册的节点信息编号会变小,因此不会成为matser,而是另一台节点继续担任master

zookeeper架构

角色描述
Leader领导者角色,主要负责投票的发起和决议,以及更新系统状态
follower

跟随者角色,用于接收客户端的请求并返回结果给客户端,在选举过程中参与投票

observer观察者角色,用户接收客户端的请求,并将这些请求转发给leader,同时同步leader状态,但是不参与投票。observer目的是扩展系统,提高伸缩性
client客户端角色,用于向zookeeper发送请求

zookeeper在kafka中的作用

  • Broker注册
  • Topic注册
  • 生产者负载均衡
  • 消费者负载均衡
  • 记录消息分区与消费者的关系
  • 消息消费进度的offset记录
  • 消费者注册

单节点部署kafka

主机:kafka1:192.168.10.101

安装zookeeper

[root@kafka1 ~]# yum -y install java
[root@kafka1 ~]# tar zxvf apache-zookeeper-3.6.0-bin.tar.gz
[root@kafka1 ~]# mv apache-zookeeper-3.6.0-bin /etc/zookeeper
[root@kafka1 ~]# cd /etc/zookeeper/conf
[root@kafka1 ~]# mv zoo_sample.cfg zoo.cfg
[root@kafka1 ~]# vim zoo.cfg 
dataDir=/etc/zookeeper/zookeeper-data[root@kafka1 ~]# cd /etc/zookeeper/
[root@kafka1 kafka]# mkdir /etc/zookeeper/zookeeper-data/
[root@kafka1 zookeeper]# ./bin/zkServer.sh start
[root@kafka1 zookeeper]# ./bin/zkServer.sh status

安装kafka

[root@kafka1 ~]# tar zxvf kafka_2.13-2.4.1.tgz 
[root@kafka1 ~]# mv kafka_2.13-2.4.1 /etc/kafka
[root@kafka1 ~]# cd /etc/kafka/[root@kafka1 kafka]# vim config/server.properties 
log.dirs=/etc/kafka/kafka-logs		//60行[root@kafka1 kafka]# mkdir /etc/kafka/kafka-logs
[root@kafka1 kafka]# bin/kafka-server-start.sh  config/server.properties &
检查两个端口的开启状态
[root@kafka1 kafka]# netstat -anpt | grep 2181
[root@kafka1 kafka]# netstat -anpt | grep 9092//注意:启动时先启动zookeeper,关闭时先关闭kafka

测试

//创建topic
./bin/kafka-topics.sh --create --zookeeper kafka1:2181 --replication-factor 1 --partitions 1 --topic test//列出topic
./bin/kafka-topics.sh --list --zookeeper kafka1:2181//查看topic
./bin/kafka-topics.sh --describe --zookeeper kafka1:2181 --topic test//生产消息
./bin/kafka-console-producer.sh --broker-list kafka1:9092 -topic test//消费消息(打开另一个终端,一边生产消息,一边查看消费消息)
./bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test//删除topic
./bin/kafka-topics.sh --delete --zookeeper kafka1:2181 --topic test

群集部署kafka

主机

kafka1:192.168.10.101

kafka2:192.168.10.102

kafka3:192.168.10.103

修改主机hosts文件(所有主机都配置)

[root@kafka1 ~]# vim /etc/hosts
192.168.10.101 kafka1
192.168.10.102 kafka2
192.168.10.103 kafka3

zookeeper的部署

安装zookeeper(三个节点的配置相同)

[root@kafka1 ~]# yum -y install java
[root@kafka1 ~]# tar zxvf apache-zookeeper-3.6.0-bin.tar.gz
[root@kafka1 ~]# mv apache-zookeeper-3.6.0-bin /etc/zookeeper

创建数据保存目录(三个节点的配置相同)

[root@kafka1 ~]# cd /etc/zookeeper/
[root@kafka1 zookeeper]# mkdir zookeeper-data

修改配置文件(三个节点的配置相同)

[root@kafka1 zookeeper]# cd /etc/zookeeper/conf
[root@kafka1 ~]# mv zoo_sample.cfg zoo.cfg
[root@kafka1 ~]# vim zoo.cfg 
dataDir=/etc/zookeeper/zookeeper-data
clientPort=2181
server.1=192.168.10.101:2888:3888
server.2=192.168.10.102:2888:3888
server.3=192.168.10.103:2888:3888

创建节点id文件(按server编号设置这个id,三个机器不同)

节点1:
[root@kafka1 zookeeper-data]# echo 1 > myid
节点2:
[root@kafka2 zookeeper-data]# echo 2 > myid
节点3:
[root@kafka3 zookeeper-data]# echo 3 > myid

启动zookeeper进程

[root@kafka1 conf]# cd /etc/zookeeper/
[root@kafka1 zookeeper]# ./bin/zkServer.sh start
[root@kafka1 zookeeper]# ./bin/zkServer.sh status

kafka的部署

kafka的安装(三个节点的配置相同)

[root@kafka1 ~]# tar zxvf kafka_2.13-2.4.1.tgz
[root@kafka1 ~]# mv kafka_2.13-2.4.1 /etc/kafka

修改配置文件

[root@kafka1 ~]# cd /etc/kafka/
[root@kafka2 kafka]# vim config/server.properties 
broker.id=1		##21行  修改,注意其他两个的id分别是2和3
listeners=PLAINTEXT://192.168.10.101:9092		#31行  修改,其他节点改成各自的IP地址
log.dirs=/etc/kafka/kafka-logs		## 60行  修改
num.partitions=1		##65行 分片数量,不能超过节点数
zookeeper.connect=192.168.10.101:2181,192.168.10.102:2181,192.168.10.103:2181

 创建日志目录(三个节点的配置相同)

[root@kafka1 kafka]# mkdir /etc/kafka/kafka-logs

在所有kafka节点上执行开启命令

生成kafka群集(三个节点的配置相同) 

[root@kafka1 kafka]# ./bin/kafka-server-start.sh config/server.properties & 
如果启动不了,可以将/etc/kafka/kafka-logs中的数据清除再试试

测试

创建topic(任意一个节点)
bin/kafka-topics.sh --create --zookeeper kafka1:2181 --replication-factor 1 --partitions 1 --topic test列出topic(任意一个节点)
bin/kafka-topics.sh --list --zookeeper kafka1:2181
bin/kafka-topics.sh --list --zookeeper kafka2:2181
bin/kafka-topics.sh --list --zookeeper kafka3:2181生产消息
bin/kafka-console-producer.sh --broker-list kafka1:9092 -topic test消费消息
bin/kafka-console-consumer.sh --bootstrap-server kafka1:9092 --topic test删除topic
bin/kafka-topics.sh --delete --zookeeper kafka1:2181 --topic test

http://www.ppmy.cn/news/1475882.html

相关文章

电脑如何快速删除相同的文件?分享5款重复文件删除工具

您有没有发现最近电脑运行速度变慢了?启动时间变得更长,甚至完成简单任务也难以如常?这可能是因为重复文件堆积所致。我们发现,清理或移动这些重复的文件和文件夹可以产生惊人的效果。通过删除不必要的重复文件和垃圾文件&#xf…

传输层协议之UDP

1、端口号 我们在应用层创建的套接字,是需要通过bind()接口绑定我们的IP地址与端口号的,这是因为数据从传输层向上交付到应用层时,需要用端口号来查找特定的服务进程。一般在网络通信时,用IP地址标识一台主机,用端口号…

一文学会鉴别“套壳”ChatGPT模型

一文学会鉴别“套壳”ChatGPT模型 随着ChatGPT等明星模型的诞生,市场上也开始出现一些“套壳”现象,即部分模型表面标榜原创或先进,实则在核心算法上与知名模型高度相似。作为技术探索者,如何拨开迷雾,识别这些“李鬼…

蓝桥杯14小白月赛题解

直接输出pi/ti,for遍历 #include <iostream> using namespace std; #define int long long int a,b,c ; double t1.00; signed main() {cin>>a;int an0;for(int i1;i<a;i){cin>>b>>c;if(t>c*1.00/b){tc*1.00/b;ani;} }cout<<an<<e…

MYSQL--第八次作业

MYSQL–第八次作业 一、备份与恢复 环境搭建&#xff1a; CREATE DATABASE booksDB; use booksDB;CREATE TABLE books ( bk_id INT NOT NULL PRIMARY KEY, bk_title VARCHAR(50) NOT NULL, copyright YEAR NOT NULL );CREATE TABLE authors ( auth_id INT NOT NULL PRI…

老物件线上3D回忆展拓宽了艺术作品的展示空间和时间-深圳华锐视点

在数字技术的浪潮下&#xff0c;3D线上画展为艺术家们开启了一个全新的展示与销售平台。这一创新形式不仅拓宽了艺术作品的展示空间&#xff0c;还为广大观众带来了前所未有的观赏体验。 3D线上画展制作以其独特的互动性&#xff0c;让艺术不再是单一的视觉享受。在这里&#x…

大数据之路 读书笔记 Day6 离线数据开发之数据开发平台

回顾 Day5 数据同步遇到的问题与解决方案Day4 数据同步 1. 统一计算平台 1.1 MaxCompute概述 MaxCompute&#xff08;原名 ODPS&#xff0c;Open Data Processing Service&#xff09;是阿里云提供的一种快速、完全托管的EB级数据仓库解决方案。它为用户提供了海量数据存储和实…

STM32智能无人机控制系统教程

目录 引言环境准备智能无人机控制系统基础代码实现&#xff1a;实现智能无人机控制系统 4.1 数据采集模块 4.2 数据处理与控制算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;无人机管理与优化问题解决方案与优化收尾与总结 1. 引言 智能无人机控…

[终端安全]-6 移动终端之应用程序安全

笔者在终端安全专题前面的文章中介绍了移动终端硬件安全和操作系统安全&#xff0c;本文主要介绍移动终端应用安全。在本文最前面&#xff0c;笔者想先解答一位朋友的疑问&#xff0c;为什么需要费心打造一个完整的面面俱到的安全体系&#xff1f; 1 移动终端安全的重要性 移…

C++——类和对象(上)

文章目录 一、类的定义1.类定义格式2.访问限定符3.类域 二、实例化1.实例化概念2.对象⼤⼩ 三、 this指针 一、类的定义 1.类定义格式 与定义结构体类似 class ST {//成员变量int val;//成员函数void print(){cout << val << endl;}};class为定义类的关键字&…

P2p网络性能测度及监测系统模型

P2p网络性能测度及监测系统模型 网络IP性能参数 IP包传输时延时延变化误差率丢失率虚假率吞吐量可用性连接性测度单向延迟测度单向分组丢失测度往返延迟测度 OSI中的位置-> 网络层 用途 面相业务的网络分布式计算网络游戏IP软件电话流媒体分发多媒体通信 业务质量 通过…

【机器学习】Exam4

实现线性不可分logistic逻辑回归 我们目前所学的都是线性回归&#xff0c;例如 y w 1 x 1 w 2 x 2 b y w_1x_1w_2x_2b yw1​x1​w2​x2​b 用肉眼来看数据集的话不难发现&#xff0c;线性回归没有用了&#xff0c;那么根据课程所学&#xff0c;我们是不是可以增加 x 3 x…

【Linux】Vim 使用教程

Linux - Vim Vim 是一款在 Linux 系统中广泛使用的文本编辑器&#xff0c;它是 Vi 编辑器的升级版。Vim 不仅功能强大&#xff0c;而且可高度定制化&#xff0c;是许多程序员和系统管理员的首选工具。以下是 Vim 在 Linux 系统中的安装、配置和使用过程的详细讲解。 附注&…

Gitea 仓库事件触发Jenkins远程构建

文章目录 引言I Gitea 仓库事件触发Jenkins远程构建1.1 Jenkins配置1.2 Gitea 配置引言 应用场景:测试、生产环境的项目自动构建和部署 手动构建和部署 Gitea 仓库事件触发Jenkins远程构建I Gitea 仓库事件触发Jenkins远程构建 Gitea支持用于仓库事件的Webhooks 1.1 Jenkin…

3-2 多层感知机的从零开始实现

import torch from torch import nn from d2l import torch as d2lbatch_size 256 # 批量大小为256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size) # load进来训练集和测试集初始化模型参数 回想一下&#xff0c;Fashion-MNIST中的每个图像由 28 28 784…

GraphQL在Postman中:释放API查询的强大潜能

&#x1f680; GraphQL在Postman中&#xff1a;释放API查询的强大潜能 Postman作为API开发和测试的领先工具&#xff0c;对GraphQL的支持为开发者提供了一种新的方式来查询和管理数据。GraphQL是一种查询语言&#xff0c;用于API&#xff0c;允许客户端明确指定他们需要哪些数…

Java数据结构-链表与LinkedList

链表 链表的概念 链表是一种物理存储结构上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的。 通俗来说&#xff0c;相比较于顺序表&#xff08;物理上连续&#xff0c;逻辑上也连续&#xff09;&#xff0c;链表物理上不一定连续。 链表是…

OpenGL笔记十之Shader类的封装

OpenGL笔记十之Shader类的封装 —— 2024-07-10 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记十之Shader类的封装1.运行2.目录结构3.main.cpp4.application4.1.CMakeLists.txt4.2.Application.h4.3.Application.cpp 5.assets5.1.shaders&#xf…

CentOS7 安装 git 命令

通过yum源install下载的git版本比较低&#xff0c;不推荐此方式安装。 官网下载最新版git源码&#xff1a;Git 1. 解压安装包 tar -xzvf git-2.45.2.tar.gz 2. 安装相关依赖 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils…

【qt】正则表达式来判断是否为邮箱登录

正则表达式是用来匹配字符串的神器. 在Qt中我们需要使用到QRegExp这个类 用exactMatch来进行匹配. [] 使用方括号 [] 来定义字符类&#xff0c;表示匹配方括号内的任意一个字符 A-Za-z0-9是字符的匹配范围. 是用于指定字符或字符类出现的次数,常见的如下 *&#xff08;匹配 0…