Kafka详解——介绍与部署

1. 什么是 Kafka?

Kafka 是一个分布式的消息队列系统,最初由 LinkedIn 开发,后来成为 Apache 开源项目。它的主要用途包括实时数据处理、日志收集、数据流管道构建等。Kafka 具备高吞吐量、可扩展性、持久性和容错性,广泛应用于大数据和实时流处理场景。

核心概念

  1. Producer(生产者):负责向 Kafka 发送消息的数据发布方。
  2. Consumer(消费者):从 Kafka 读取消息的应用程序。
  3. Topic(主题):消息的分类,生产者将消息发布到特定的 Topic,消费者订阅感兴趣的 Topic。
  4. Partition(分区):每个 Topic 可划分为多个分区,支持并行处理,提高吞吐量。
  5. Broker(代理):Kafka 集群中的服务器节点,负责存储数据和处理请求。
  6. Zookeeper:用于管理 Kafka 集群的元数据,跟踪 Broker、Partition 以及消费者的状态。

Kafka 的工作流程

  1. 生产者发送消息

    生产者将消息发布到指定的 Topic。Topic 内部有多个分区,生产者按照轮询或键哈希的方式将消息分配到不同分区。
  2. Broker 存储消息

    Broker 接收到消息后,持久化到磁盘,并为每条消息分配一个偏移量(offset)。
  3. 消费者读取消息

    消费者订阅 Topic,从对应的分区读取消息,并记录已消费的偏移量,确保数据不重复、不丢失。

Kafka 的特点

  • 高吞吐量:支持大规模消息处理,利用分区并行处理能力。
  • 持久化存储:消息持久化到磁盘,支持数据恢复。
  • 水平扩展:通过增加 Broker 扩容,支持百万级 TPS(每秒事务处理量)。
  • 容错性:分区副本机制确保数据高可用,Broker 故障时其他节点能接管。
  • 流处理能力:与 Kafka Streams、Flink 等工具结合,支持实时数据处理。

常见应用场景

  1. 日志收集:收集服务器日志,统一传输到大数据平台。
  2. 监控系统:实时收集应用程序指标,构建监控告警系统。
  3. 数据管道:作为数据流的中间件,在系统间传输和处理数据。
  4. 消息队列:解耦系统,提高服务扩展性和容错能力。

2. Kafka的部署

前置准备:需要有3台免密互通的虚拟机并安装好JAVA环境,未安装可参考:

本地部署大数据集群前置准备https://blog.csdn.net/m0_73641796/article/details/145994787?spm=1001.2014.3001.5501

2.1 Zookeeper安装

上传Zookeeper并修改配置文件

tar -zxf apache-zookeeper-3.7.1-bin.tar.gz -C /export/server/
cd /export/server/
mv apache-zookeeper-3.7.1-bin/ zookeeper
cd zookeeper/
mkdir zkData
cd zkData/
echo "1" >> myid;
cd ../conf/
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
# 以下内容为修改内容
dataDir=/export/server/zookeeper/zkData# 以下内容为新增内容
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

分发Zookeeper

cd /export/server/
scp -r zookeeper node2:`pwd`/
scp -r zookeeper node3:`pwd`/# 分别将不同虚拟机/export/server/zookeeper/zkData目录下myid文件进行修改
vim /export/server/zookeeper/zkData/myid# node1:1
# node2:2
# node3:3

封装启停脚本

cd /usr/bin
vim zk.sh
--添加如下内容:
#!/bin/bashcase $1 in
"start"){for i in node1 node2 node3doecho ---------- zookeeper $i 启动 ------------ssh $i "/export/server/zookeeper/bin/zkServer.sh start"done
};;
"stop"){for i in node1 node2 node3doecho ---------- zookeeper $i 停止 ------------    ssh $i "/export/server/zookeeper/bin/zkServer.sh stop"done
};;
"status"){for i in node1 node2 node3doecho ---------- zookeeper $i 状态 ------------    ssh $i "/export/server/zookeeper/bin/zkServer.sh status"done
};;
esac# 给zk.sh文件授权
chmod 777 zk.sh

2.2 启停Zookeeper

# 启动ZK服务
zk.sh start
# 查看ZK服务状态
zk.sh status
# 停止ZK服务
zk.sh stop

2.3  Kafka安装

上传kafka并修改配置文件

tar -zxf kafka_2.12-3.6.1.tgz -C /export/server/
cd /export/server/
mv kafka_2.12-3.6.1/ kafka
cd kafka/config
vim server.properties
--修改如下配置
broker.id=1
advertised.listeners=PLAINTEXT://node1:9092
log.dirs=/export/server/kafka/kafka-logs
zookeeper.connect=node1:2181,node2:2181,node3:2181/kafka

分发kafka

cd /export/server/scp -r kafka node2:`pwd`/
scp -r kafka node3:`pwd`/# 分别修改Node2与Node3的配置文件
vim /export/server/kafka/config/server.properties
--node2
broker.id=2
advertised.listeners=PLAINTEXT://node2:9092
--node3
broker.id=3
advertised.listeners=PLAINTEXT://node3:9092

配置环境变量

--在node1,node2,node3均执行以下操作:vim /etc/profile
--添加如下内容:
#KAFKA_HOME
export KAFKA_HOME=/export/server/kafka
export PATH=$PATH:$KAFKA_HOME/binsource /etc/profile

2.4  启停Kafka

启动前请先启动ZooKeeper服务

cd /export/server/kafka
# 执行启动指令
bin/kafka-server-start.sh -daemon config/server.properties
# 执行关闭指令
bin/kafka-server-stop.sh

 封装启停脚本

cd /usr/bin
vim kfk.sh
--添加如下内容:
#! /bin/bashcase $1 in
"start"){for i in node1 node2 node3doecho " --------启动 $i Kafka-------"ssh $i "/export/server/kafka/bin/kafka-server-start.sh -daemon /export/server/kafka/config/server.properties"done
};;
"stop"){for i in node1 node2 node3doecho " --------停止 $i Kafka-------"ssh $i "/export/server/kafka/bin/kafka-server-stop.sh "done
};;
esac# 给文件授权
chmod 777 kfk.sh# 启动kafka
kfk.sh start
# 停止Kafka
kfk.sh stop

注意:停止Kafka集群时,一定要等Kafka所有节点进程全部停止后再停止ZooKeeper集群。因为Zookeeper集群当中记录着Kafka集群相关信息,Zookeeper集群一旦先停止,Kafka集群就没有办法再获取停止进程的信息,只能手动杀死Kafka进程了。

2.5 联合脚本

因为Kafka启动前,需要先启动ZooKeeper,关闭时,又需要将所有Kafka全部关闭后,才能关闭ZooKeeper,这样,操作起来感觉比较麻烦,所以可以将之前的2个脚本再做一次封装。

新建xcall脚本,具体实现可参考:

集群批量命令执行工具 xcall 配置指南https://blog.csdn.net/m0_73641796/article/details/146318713?sharetype=blogdetail&sharerId=146318713&sharerefer=PC&sharesource=m0_73641796&spm=1011.2480.3001.8118创建cluster.sh脚本文件

vim /usr/bin/cluster.sh
--添加如下内容:
#!/bin/bashcase $1 in
"start"){echo ================== 启动 Kafka集群 ==================#启动 Zookeeper集群zk.sh start#启动 Kafka集群kfk.sh start};;
"stop"){echo "================== 停止 Kafka 集群 =================="# 停止 Kafkakfk.sh stop# 检查 Kafka 进程是否完全退出max_wait=30  # 最多等待 30 秒count=0while truedokafka_count=$(xcall jps | grep -c Kafka)echo "当前未停止的 Kafka 进程数为 $kafka_count"# 判断 Kafka 是否全部停止if [ "$kafka_count" -eq 0 ]; thenecho "Kafka 已完全停止"breakfi# 如果超过最大等待时间,还没停干净,强制结束count=$((count+1))if [ $count -ge $max_wait ]; thenecho "Kafka 停止超时,强制杀死残留进程"xcall "pkill -f kafka"breakfisleep 1done# 停止 Zookeeperzk.sh stop
};;
esac--添加权限
chmod 777 /usr/bin/cluster.sh

脚本调用方式

# 集群启动
cluster.sh start
# 集群关闭
cluster.sh stop

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

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

相关文章

win10搭建opengl环境搭建并测试--输出立方体球体和碗型并在球体上贴图

参照本文档可以完成环境搭建和测试,如果想要快速完成环境的搭建可以获取本人的工程,包括所用到的工具链和测试工程源码获取(非免费介意务下载):链接: https://pan.baidu.com/s/1H2ejbT7kLM9ore5MqyomgA 提取码: 8s1b …

TCP、UDP协议的应用、ServerSocket和Socket、DatagramSocket和DatagramPacket

DAY13.1 Java核心基础 TCP协议 TCP 协议是面向连接的运算层协议,比较复杂,应用程序在使用TCP协议之前必须建立连接,才能传输数据,数据传输完毕之后需要释放连接 就好比现实生活中的打电话,首先确保电话打通了才能进…

如何在 GoLand 中设置默认项目文件夹

在使用 GoLand 进行开发时,设置一个默认的项目文件夹可以大大提高工作效率。默认项目文件夹会在你打开或新建项目时自动预选,避免每次都需要手动导航到目标目录。本文将详细介绍如何在 GoLand 中设置默认项目文件夹。 步骤一:打开系统设置 …

SvelteKit 最新中文文档教程(5)—— 页面选项

前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1: Svelte …

Mac下Ollama安装全攻略:开启本地大模型之旅

文章目录 Mac下Ollama安装全攻略:开启本地大模型之旅一、Ollama 是什么功能特点优势应用场景 二、安装前准备(一)系统要求(二)硬件要求 三、下载安装包(一)官网下载(二)其…

华为营销流程落地方案:MTC=MTL+LTC

目录 简介 MTC流程 作者简介 简介 只讲最本质的底层逻辑,交付可落地的方案。 作为一个主打实践的产品老炮,接下来我将结合自己的经验, 以华为系的这套流程为基准, 将涉及业务层次的流程全部重构一套本地化、落地化的方案。 …

vscode使用ssh同时连接主机CentOS:user和ubuntu20.04:docker

主机为CentOS docker为Ubuntu20.04 两者可以使用一个vscode远程链接 1.使用已拉取好的Ubuntu镜像建立docker容器 2.进入容器内,下载一些关于ssh的安装包 apt-get install vim apt-get install openssh-client apt-get install openssh-server apt-get install ssh passwd …

NFS网络文件共享服务

文章目录 1. NFS工作原理1.1 挂载结构介绍1.2 NFS的工作原理 2. NFS服务安装2.1 NFS软件列表2.2 启动NFS相关服务2.3 NFS服务常见进程2.4 实战配置NFS服务器端 3. NFS服务配置3.1 在NFS Server端执行的操作3.1.1 查看部署环境3.1.2 启动rpcbind及NFS服务,然后加入开…

《多语言实时交流辅助系统前端的设计与实现》开题报告

个人主页:大数据蟒行探索者 目录 一、选题目的与意义 1.选题目的 2选题意义 2.1技术挑战与创新 2.2市场需求 2.3促进文化交流 2.4教育应用 2.5社会影响 二、研究现状与文献综述 1.研究现状 2.文献综述 2.1 前端技术的发展与应用 2.2 自然语言处理技术…

SpringCloud网关:Gateway路由配置与过滤器链

文章目录 引言一、Gateway基本架构二、路由配置方式2.1 配置文件方式2.2 Java代码方式 三、内置断言工厂四、内置过滤器工厂4.1 请求路径相关过滤器4.2 请求和响应头过滤器4.3 功能性过滤器 五、自定义过滤器5.1 自定义GatewayFilter5.2 自定义过滤器工厂 六、全局过滤器总结 引…

咖啡点单小程序毕业设计(JAVA+SpringBoot+微信小程序+完整源码+论文)

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着社会的快速发展和…

Excel(函数进阶篇):Vlookup函数进阶、TAKE嵌套SORE函数、SUBTOTAL函数、INDIRECT函数

目录 Vlookup函数返回多列结果Vlookup函数多条件匹配Vlookup函数部分匹配TAKE函数嵌套SORT函数,提取排序数据SUBTOTAL函数:制作动态报表SUBTOTAL函数:创建连续编号INDIRECT函数Vlookup跨多表抓取数据INDIRECT函数常见跨表的错误Vloopup函数联…

大模型 VS 传统算法:人工智能时代的“新老对话“

大模型 VS 传统算法:人工智能时代的"新老对话" 在AlphaGo击败李世石、ChatGPT掀起全民AI热潮的今天,人们往往将"大模型"与"算法"混为一谈。但当我们深入技术内核时会发现,这二者恰似人工智能发展的两个平行宇…

【蓝桥杯每日一题】3.17

🏝️专栏: 【蓝桥杯备篇】 🌅主页: f狐o狸x 他们说内存泄漏是bug,我说这是系统在逼我进化成SSR级程序员 OK来吧,不多废话,今天来点有难度的:二进制枚举 二进制枚举,就是…

Matlab 汽车振动多自由度非线性悬挂系统和参数研究

1、内容简介 略 Matlab 169-汽车振动多自由度非线性悬挂系统和参数研究 可以交流、咨询、答疑 2、内容说明 略 第二章 汽车模型建立 2.1 汽车悬架系统概述 2.1.1 悬架系统的结构和功能 2.1.2 悬架分类 2.2 四分之一车辆模型 对于车辆动力学,一般都是研究其悬…

hackmyvm-Smol

信息收集 ┌──(root㉿kali)-[/home/kali] └─# arp-scan -I eth1 192.168.56.0/24 Interface: eth1, type: EN10MB, MAC: 00:0c:29:34:da:f5, IPv4: 192.168.56.103 WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied WARNING: Cannot open MAC/Vendo…

深度学习项目--基于DenseNet网络的“乳腺癌图像识别”,准确率90%+,pytorch复现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 如果说最经典的神经网络,ResNet肯定是一个,从ResNet发布后,很多人做了修改,denseNet网络无疑是最成功的…

基于x11vnc的ubuntu远程桌面

1、安装VNC服务 sudo apt install x11vnc -y2、创建连接密码 sudo x11vnc -storepasswd3、安装lightdm服务 x11vnc 在 默认的 GDM3 中不起作用,因此需要使用 lightdm 桌面管理环境 sudo apt install lightdm -y切换至lightdm,上一步已经切换则跳过该…

Git 常用命令完全指南:从入门到高效协作

文章需要结构清晰,涵盖从入门到进阶的常用命令,结合实例和注意事项,帮助用户快速掌握Git的核心功能,并应用到实际项目中 一、仓库初始化与基础操作 1. 创建与克隆仓库 # 初始化本地仓库 git init# 克隆远程仓库(SSH方…

【运维自动化-标准运维】如何实现一个最简单的流程编排

流程编排是标准运维最核心的功能,通过将不同功能的原子插件在画布上可视化的拖拽编排,可以实现各种不同场景的跨系统工作流。标准运维流程 根据实际运维操作场景梳理出来的操作步骤,通过不同的流转逻辑(并行、分支、条件并行&…