Kafka集群搭建

news2024/11/16 9:53:00

集群应用场景

(1)消息传递

  • Kafka可以很好地替代传统邮件代理。消息代理的使用有多种原因(将处理与数据生产者分离,缓冲未处理的消息等)。与大多数邮件系统相比,Kafka具有更好的吞吐量,内置的分区,复制和容错功能,这使其成为大规模邮件处理应用程序的理想解决方案。
  • 根据我们的经验,消息传递的使用通常吞吐量较低,但是可能需要较低的端到端延迟,并且通常取决于Kafka提供的强大的持久性保证。
  • 在这个领域,Kafka与ActiveMQ或 RabbitMQ等传统消息传递系统相当。

(2)网站活动路由

  • Kafka最初的用例是能够将用户活动跟踪管道重建为一组实时的发布-订阅。这意味着将网站活动(页面浏览,搜索或用户可能采取的其他操作)发布到中心主题,每种活动类型只有一个主题。这些提要可用于一系列用例的订阅,包括实时处理,实时监控,以及加载到Hadoop或脱机数据仓库系统中以进行脱机处理和报告。
  • 活动跟踪通常量很大,因为每个用户页面视图都会生成许多活动消息。

(3)监控指标

        Kafka通常用于操作监控数据。这涉及汇总来自分布式应用程序的统计信息,以生成操作数据的集中。

(4)日志汇总

        许多人使用Kafka代替日志聚合解决方案。日志聚合通常从服务器收集物理日志文件,并将它们放在中央位置(也许是文件服务器或HDFS)以进行处理。Kafka提取文件的详细信息,并以日志流的形式更清晰地抽象日志或事件数据。这允许较低延迟的处理,并更容易支持多个数据源和分布式数据消耗。与以日志为中心的系统(例如Scribe或Flume)相比,Kafka具有同样出色的性能,由于复制而提供的更强的耐用性保证以及更低的端到端延迟。

(5)流处理

        Kafka的许多用户在由多个阶段组成的处理管道中处理数据,其中原始输入数据从Kafka主题中使用,然后进行汇总,充实或以其他方式转换为新主题,以供进一步使用或后续处理。例如,用于推荐新闻文章的处理管道可能会从RSS提要中检索文章内容,并将其发布到“文章”主题中。进一步的处理可能会使该内容规范化或重复数据删除,并将清洗后的文章内容发布到新主题中;最后的处理阶段可能会尝试向用户推荐此内容。这样的处理管道基于各个主题创建实时数据流的图形。从0.10.0.0开始,一个轻量但功能强大的流处理库称为Kafka Streams 可以在Apache Kafka中使用来执行上述数据处理。除了Kafka Streams以外,其他开源流处理工具还包括Apache Storm和 Apache Samza。

(6)活动采集

        事件源是一种应用程序,其中状态更改以时间顺序记录记录。Kafka对大量存储的日志数据的支持使其成为以这种样式构建的应用程序的绝佳后端。

(7)提交日志

        Kafka可以用作分布式系统的一种外部提交日志。该日志有助于在节点之间复制数据,并充当故障节点恢复其数据的重新同步机制。Kafka中的日志压缩功能有助于支持此用法。在这种用法中,Kafka类似于Apache BookKeeper项目。

  • 横向扩展,提高Kafka的处理能力
  • 镜像,副本,提供高可用。

集群搭建

1、搭建设计

2、分配三台Linux,用于安装拥有三个节点的Kafka集群。 

  • node2(192.168.100.102)
  • node3(192.168.100.103)
  • node4(192.168.100.104)

以上三台主机的/etc/hosts配置:

192.168.100.102 node2
192.168.100.103 node3
192.168.100.104 node4

3、Zookeeper集群搭建

(1)Linux安装JDK,三台Linux都安装。

  • 上传JDK到linux
  • 安装并配置JDK
# 使用rpm安装JDK
rpm -ivh jdk-8u261-linux-x64.rpm
# 默认的安装路径是/usr/java/jdk1.8.0_261-amd64
# 配置JAVA_HOME
vim /etc/profile
# 文件最后添加两行
export JAVA_HOME=/usr/java/jdk1.8.0_261-amd64
export PATH=$PATH:$JAVA_HOME/bin
# 退出vim,使配置生效
source /etc/profile
  • 查看JDK是否正确安装

java -version

(2)Linux 安装Zookeeper,三台Linux都安装,以搭建Zookeeper集群

  • 上传zookeeper-3.4.14.tar.gz到Linux
  • 解压并配置zookeeper
# node2操作
# 解压到/opt目录
tar -zxf zookeeper-3.4.14.tar.gz -C /opt
# 配置
cd /opt/zookeeper-3.4.14/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
# 设置
dataDir=/var/lagou/zookeeper/data
# 添加
server.1=node2:2881:3881
server.2=node3:2881:3881
server.3=node4:2881:3881

# 退出vim
mkdir -p /var/lagou/zookeeper/data
echo 1 > /var/lagou/zookeeper/data/myid

# 配置环境变量
vim /etc/profile
# 添加
export ZOOKEEPER_PREFIX=/opt/zookeeper-3.4.14
export PATH=$PATH:$ZOOKEEPER_PREFIX/bin
export ZOO_LOG_DIR=/var/lagou/zookeeper/log

# 退出vim,让配置生效
source /etc/profile

# 将/opt/zookeeper-3.4.14拷贝到node3,node4
scp -r /opt/zookeeper-3.4.14/ node3:/opt
scp -r /opt/zookeeper-3.4.14/ node4:/opt

node3配置

# 配置环境变量
vim /etc/profile
# 在配置JDK环境变量基础上,添加内容
export ZOOKEEPER_PREFIX=/opt/zookeeper-3.4.14
export PATH=$PATH:$ZOOKEEPER_PREFIX/bin
export ZOO_LOG_DIR=/var/lagou/zookeeper/log

# 退出vim,让配置生效
source /etc/profile

mkdir -p /var/lagou/zookeeper/data
echo 2 > /var/lagou/zookeeper/data/myid

node4配置

# 配置环境变量
vim /etc/profile
# 在配置JDK环境变量基础上,添加内容
export ZOOKEEPER_PREFIX=/opt/zookeeper-3.4.14
export PATH=$PATH:$ZOOKEEPER_PREFIX/bin
export ZOO_LOG_DIR=/var/lagou/zookeeper/log

# 退出vim,让配置生效
source /etc/profile

mkdir -p /var/lagou/zookeeper/data
echo 3 > /var/lagou/zookeeper/data/myid

启动zookeeper

# 在三台Linux上启动Zookeeper
[root@node2 ~]# zkServer.sh start
[root@node3 ~]# zkServer.sh start
[root@node4 ~]# zkServer.sh start


# 在三台Linux上查看Zookeeper的状态
[root@node2 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

[root@node3 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader

[root@node4 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

4、Kafka集群搭建

(1)安装Kafka

  • 上传并解压Kafka到/opt
# 解压到/opt
tar -zxf kafka_2.12-1.0.2.tgz -C /opt

# 拷贝到node3和node4
scp -r /opt/kafka_2.12-1.0.2/ node3:/opt
scp -r /opt/kafka_2.12-1.0.2/ node4:/opt
  • 配置Kafka
# 配置环境变量,三台Linux都要配置
vim /etc/profile
# 添加以下内容:
export KAFKA_HOME=/opt/kafka_2.12-1.0.2
export PATH=$PATH:$KAFKA_HOME/bin

# 让配置生效
source /etc/profile

# node2配置
vim /opt/kafka_2.12-1.0.2/config/server.properties

broker.id=0
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://node2:9092
log.dirs=/var/lagou/kafka/kafka-logs
zookeeper.connect=node2:2181,node3:2181,node4:2181/myKafka
# 其他使用默认配置


# node3配置
vim /opt/kafka_2.12-1.0.2/config/server.properties

broker.id=1
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://node3:9092
log.dirs=/var/lagou/kafka/kafka-logs
zookeeper.connect=node2:2181,node3:2181,node4:2181/myKafka
# 其他使用默认配置


# node4配置
vim /opt/kafka_2.12-1.0.2/config/server.properties

broker.id=2
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://node4:9092
log.dirs=/var/lagou/kafka/kafka-logs
zookeeper.connect=node2:2181,node3:2181,node4:2181/myKafka
# 其他使用默认配置
  • 启动Kafka
[root@node2 ~]# kafka-server-start.sh /opt/kafka_2.12-1.0.2/config/server.properties
[root@node3 ~]# kafka-server-start.sh /opt/kafka_2.12-1.0.2/config/server.properties
[root@node4 ~]# kafka-server-start.sh /opt/kafka_2.12-1.0.2/config/server.properties
  • 验证Kafka

node2节点的Cluster Id:

node3节点的Cluster Id: 

node4节点的Cluster Id: 

  • Cluster Id是一个唯一的不可变的标志符,用于唯一标志一个Kafka集群。
  • 该Id最多可以有22个字符组成,字符对应于URL-safe Base64。
  • Kafka 0.10.1版本及之后的版本中,在集群第一次启动的时候,Broker从Zookeeper的<Kafka_ROOT>/cluster/id节点获取。如果该Id不存在,就自动生成一个新的。 
zkCli.sh
# 查看每个Broker的信息
get /brokers/ids/0
get /brokers/ids/1
get /brokers/ids/2

node2节点在Zookeeper上的信息:

node3节点在Zookeeper上的信息: 

node4节点在Zookeeper上的信息: 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java项目:SSM会议室预约系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含管理员与用户两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登陆,会议室管理,预约审核管理,用户注册等功能。 用…

半路出家的菜鸡程序员,北漂五年,给刚入行朋友的一些忠告,发自肺腑

从高中&#xff08;s1&#xff09;到大学&#xff08;s7&#xff09;打了7年的LOL&#xff0c;电一大师、网一王者&#xff0c;一度准备打职业。多的不再赘述&#xff0c;要知道&#xff0c;那些除了纪念和情怀&#xff0c;对我都不再有意义。 难以启齿&#xff0c;LOL算是陪伴…

【OpenCV学习】第8课:形态学操作-开丶闭丶形态学梯度丶顶帽丶黑帽

仅自学做笔记用,后续有错误会更改 理论 开&#xff1a;先腐蚀 后膨胀&#xff08;效果&#xff1a;可以去掉小对象&#xff09;闭&#xff1a;先膨胀 后腐蚀&#xff08;效果: 可以填洞&#xff0c;去污渍&#xff09;形态学梯度&#xff08;基本梯度&#xff09;&#xff1a…

委托(delegate)

委托&#xff08;delegate&#xff09; 委托概述 将方法调用者和目标方法动态关联起来&#xff0c;委托是一个类&#xff0c;所以它和类是同级的&#xff0c;可以通过委托来掉用方法&#xff0c;不要误以为委托和方法同级的&#xff0c;方法只是类的成员。委托定义了方法的类…

Flutter - DecoratedBox(装饰容器)及内部控件使用详解

DecoratedBox. 可以在其子组件绘制前(或后)绘制一些装饰&#xff08;Decoration&#xff09;&#xff0c;如背景、边框、渐变等 比如 这样 这样 这样 // DecoratedBox 的源码 const DecoratedBox({super.key,required this.decoration, // Decorationthis.position Decor…

产品新说 | 重磅,刚刚正式发布

在当代术加持和需求迭代的背景下&#xff0c;运维人员更需要透过现象看本质&#xff0c;也就是通过复杂的表象数据去挖掘其背后的信息价值。而运维数据经过各种技术手段的治理后&#xff0c;通常的呈现方式是数据空间的形式&#xff0c;比如表格、纯文字等。为了更形象地表达数…

层次遍历二叉树

层次遍历二叉树 文章目录层次遍历二叉树♥ 做法♥算法构思♥ 数据结构设计♥ 层次遍历过程♥ 算法实现应用:用层次遍历求路径之逆♥ 问题♥ 解题思路:♥ 算法框架&#xff1a;♥ 算法实现♥ 做法 ▪ 逐层进行访问 ▪ 对某一层的节点访问完后,再按照其访问次序对各个节点的左、…

[附源码]Python计算机毕业设计SSM基于的在线怀旧电影歌曲听歌系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

MATLAB算法实战应用案例精讲-【神经网络】扩散模型(Diffusion Models)

前言 广播模型、扩散模型和传染模型可以用于分析信息、技术、行为、信念和传染病在人群中的传播。这些模型在通信科学、市场营销学和流行病学的研究中发挥着核心作用。 在计算机视觉中,生成模型是一类能够生成合成图像的模型。例如,一个被训练来生成人脸的模型,每次都会生…

Java项目:SSM电子书网站管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含管理员、用户两种角色&#xff1b; 管理员角色包含以下功能&#xff1a; 登录页面,管理员管理书籍,用户管理等功能。 用户角色包含…

Docker学习笔记4(狂神)

DockerFile 很多官方镜像都是基础包&#xff0c;很多功能没有&#xff0c;我们通常会自己搭建自己的镜像&#xff01; 官方既然可以制作镜像&#xff0c;那我们也可以&#xff01; DockerFile的构建过程 很多指令&#xff1a; 创建一个自己的centos: 我们可以看到我们从docke…

代码随想录训练营第四天

专题&#xff1a;链表 题目&#xff1a;两两交换链表中的节点 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 例如&#xff1a; 题目分析 要两两交换链表中的结…

python opencv 找到圆点标定板所有点后通过距离找两个角点6

先对大图中的标定板框选&#xff0c;然后再标定计算 工程目录结构 如果提示没有win32gui则 pip install pywin32 如果是conda的环境则 conda install pywin32 drawROI.py import copy import jsonimport cv2 import numpy as np import os import matplotlib.pyplot as plt f…

【计算机视觉】Keras API和Tensorflow API的讲解(超详细必看)

觉得有帮助麻烦点赞关注收藏~~~ 一、Keras API Keras是一个用Python编写的高级神经网络API&#xff0c;它能够以Tensorflow、CNTK或者Theano作为后端运行&#xff0c;是一个模块化&#xff0c;最小化并且非常容易扩展的架构&#xff0c;它的开发者Francois Chollet说&#xff…

ESP32 ESP-IDF LVGL8.3.3 ST7735颜色修正

陈拓 2022/12/07-2022/12/10 1. 概述 在《ESP32 ESP-IDF LVGL8.3.3移植(ST7735)》 ESP32 ESP-IDF LVGL8.3.3移植_晨之清风的博客-CSDN博客ESP32 ESP-IDF LVGL8.3.3移植。https://blog.csdn.net/chentuo2000/article/details/128269394?spm1001.2014.3001.5502​​​​​​​…

Python 工匠 第四章 条件分支控制流

基础知识 分支惯用写法 没必要显式和布尔值比较&#xff0c;直接&#xff1a; if user.is_active:pass省略零值判断 if containers_count 0: --> if not containers_count: # 因为bool(0): False但是两者仍有不同 前者只有为0的时候才满足条件 后者则扩大到0, None, 空…

说说Vue-Router和Vue组件中的name属性的使用区别

目录 ⏬ Vue路由匹配规则routes中的name属性的使用 1. 指定页面路由&#xff0c;并传递参数 2. 获取组件的name值&#xff0c;以供页面使用 3. 同个路由&#xff0c;渲染多个视图 ⏬ vue组件中name的使用 1、组件递归操作 2、配合keep-alive对组件缓存做限制 3、在dev-to…

SpringBoot---错误处理机制

PostManHttp请求模拟工具&#xff0c;软件下载链接如下 PostMan下载链接 如果是其他客户端&#xff0c;默认响应一个JSON数据 原理-----SpirngMVC错误处理的自动配置 可以参照ErrorMvcAutoConfiguration&#xff1b;错误处理的自动配置&#xff1b; 给容器中添加了以下组件: …

基于51单片机的多功能电子时钟设计

设计任务&#xff1a; 1、设计任务&#xff1a;利用单片机、时钟芯片 DS1302、温度传感器 DS18B20、1602 液晶 等实现日期、时间、温度的显示即一个简单的万年历。 2、设计要求 &#xff08;1&#xff09;通过 DS1302 能够准确的计时&#xff0c;时间可调并在液晶上显示出来…

RK3568平台开发系列讲解(驱动基础篇)Linux内核面向对象思想之封装

🚀返回专栏总目录 文章目录 一、链表的抽象与封装二、设备管理模型的抽象与封装三、总线设备模型的抽象与封装沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux内核虽然是使用C语言实现的,但是内核中的很多子系统、模块在实现过程中处处体现了面向对象编程思想。…