Kafka集群部署详细教程

版本说明

  • Ubuntu 18.04.6
  • Zookeeper 3.5.9
  • Kafka 2.7.0
  • JDK8

集群配置

操作系统ip域名Zookeeper 端口Kafka 端口
Ubuntu 18.04.6192.168.50.131kafka1.com21819092
Ubuntu 18.04.6192.168.50.132kafka2.com21819092
Ubuntu 18.04.6192.168.50.133kafka3.com21819092

安装 vim, curl

sudo apt update
sudo apt install vim
sudo apt install curl

配置静态 ip 和 hosts

为了使用域名,更加方便的进行配置,这里将虚拟机的 DHCP 改成了静态分配 IP,所以需要手动设置一下每台机器 IP 地址,这里以 192.168.50.131 为例。

  1. 找到网络接口名称,运行以下命令:

    ip addr
    

    查找以 enseth 开头的接口名称。例如,ens33eth0

    hedon@ubuntu:~$ ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:82:9e:69 brd ff:ff:ff:ff:ff:ffinet 192.168.50.133/24 brd 192.168.50.255 scope global dynamic noprefixroute ens33valid_lft 1644sec preferred_lft 1644secinet6 fe80::c367:c7cc:3ad4:23b3/64 scope link valid_lft forever preferred_lft forever
    

    可以找到 ens33,其中 inet 192.168.50.133/24 表示 IP 地址为 192.168.50.133,子网掩码为 /24(等于 255.255.255.0)。

    这个 IP 地址是 DHCP 动态分配的,说明宿主机分配给虚拟机的 IP 范围就在 192.168.50.xxx,所以我们会将静态 IP 配置在这个范围内。

  2. 获取网关地址

    ip route | grep default
    

    输出:

    hedon@ubuntu:~$ ip route | grep default
    default via 192.168.50.2 dev ens33 proto dhcp metric 100
    

    说明默认网关是 192.168.50.2

  3. 编辑 /etc/network/interfaces 文件,配置静态 IP 地址,内容如下:

    auto ens33
    iface ens33 inet staticaddress 192.168.50.131netmask 255.255.255.0gateway 192.168.50.2dns-nameservers 8.8.8.8 8.8.4.4
    
  4. 重启

    su reboot
    
  5. 再次查看 ip 地址

    ip addr
    

    有以下输出便说明静态 IP 配置成功了。

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:82:9e:69 brd ff:ff:ff:ff:ff:ffinet 192.168.50.131/24 brd 192.168.50.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe82:9e69/64 scope link valid_lft forever preferred_lft forever
    
  6. 配置域名

    sudo vim /etc/hosts
    

    追加内容如下:

    192.168.50.131 kafka1.com
    192.168.50.132 kafka2.com
    192.168.50.133 kafka3.com
    
  7. ping 一下

    hedon@ubuntu:~$ ping kafka1.com
    PING kafka1.com (192.168.50.131) 56(84) bytes of data.
    64 bytes from kafka1.com (192.168.50.131): icmp_seq=1 ttl=64 time=0.024 ms
    64 bytes from kafka1.com (192.168.50.131): icmp_seq=2 ttl=64 time=0.021 ms
    64 bytes from kafka1.com (192.168.50.131): icmp_seq=3 ttl=64 time=0.029 ms
    ^C
    --- kafka1.com ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2029ms
    rtt min/avg/max/mdev = 0.021/0.024/0.029/0.006 ms
    
  8. ping 一下百度,看看能不能访问外网

    hedon@ubuntu:~$ ping baidu.com
    ping: baidu.com: Name or service not known
    

    如果这里可以访问,则直接跳过进入下一步,不可以的话,需要配置一下域名解析系统。

  9. 配置域名解析系统

    sudo vim /etc/resolv.conf
    

    追加下面内容:

    nameserver 8.8.8.8
    nameserver 8.8.4.4
    

    再尝试 ping 一下百度:

    hedon@ubuntu:~$ ping www.baidu.com
    PING www.a.shifen.com (153.3.238.110) 56(84) bytes of data.
    64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=1 ttl=128 time=15.9 ms
    64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=2 ttl=128 time=15.9 ms
    64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=3 ttl=128 time=16.1 ms
    64 bytes from 153.3.238.110 (153.3.238.110): icmp_seq=4 ttl=128 time=15.3 ms
    ^C
    --- www.a.shifen.com ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 14104ms
    rtt min/avg/max/mdev = 15.368/15.850/16.145/0.291 ms
    

补充说明:/etc/network/interfaces 文件的配置

这是一个用于配置 Linux 系统上网络接口的文件。在这个示例中,我们为名为 ens33 的网络接口配置了静态 IP 地址和相关的网络设置。下面是各行的解释:

  1. auto ens33: 这一行表示在系统启动时自动激活 ens33 网络接口。auto 关键字后面跟着接口名称。

  2. iface ens33 inet static: 这一行定义了 ens33 网络接口的配置。iface 关键字后面跟着接口名称,inet 表示我们正在配置 IPv4 地址,static 表示我们要为接口分配一个静态 IP 地址(而不是通过 DHCP 获得)。

  3. address 192.168.50.131: 这一行设置了网络接口的静态 IP 地址。在这个例子中,我们为 ens33 接口分配了 192.168.50.131 IP 地址。

    IP 地址是 Internet 协议(IP)用于在网络中唯一标识设备的数字标签。每个连接到网络的设备都需要一个唯一的 IP 地址,以便其他设备可以找到并与之通信。IP 地址通常分为两种版本:IPv4 和 IPv6。在此示例中,我们使用了一个 IPv4 地址。

  4. netmask 255.255.255.0: 这一行定义了子网掩码。在这个例子中,子网掩码是 255.255.255.0,表示前三个字节(24 位)是网络地址,最后一个字节(8 位)是主机地址。

    子网掩码用于划分 IP 地址的网络部分和主机部分。子网掩码与 IP 地址进行按位与操作,从而得到网络地址。这有助于确定哪些 IP 地址属于同一子网,以便正确地将数据包路由到目的地。子网划分有助于组织网络、提高安全性和管理性。

  5. gateway 192.168.50.2: 这一行设置了默认网关。在这个例子中,我们将默认网关设置为 192.168.50.2。默认网关是用于将数据包发送到其他网络的路由器或设备的 IP 地址。

    网关是一个充当网络中数据包传输的中继点的设备,通常是一个路由器。当一个设备需要将数据包发送到不同子网的另一个设备时,它会将数据包发送到网关。网关负责将数据包路由到正确的目的地。默认网关是设备用于将数据包发送到其他网络的首选网关。

  6. dns-nameservers 8.8.8.8 8.8.4.4: 这一行指定了 DNS 服务器的 IP 地址。在这个例子中,我们使用了谷歌的公共 DNS 服务器 8.8.8.88.8.4.4。DNS 服务器用于将主机名解析为 IP 地址。

    域名系统(DNS)是将人类可读的域名(例如 www.baidu.com)IP 地址的系统。DNS 服务器是负责执行此解析过程的服务器。当您在浏览器中输入一个网址时,计算机会向 DNS 服务器查询该域名对应的 IP 地址,然后将请求发送到该 IP 地址以获取网页内容。

配置文件中的这些设置将在系统启动时生效。要立即应用更改,您可以使用以下命令重启网络服务:

sudo systemctl restart networking

安装 jdk

sudo apt update
sudo apt install openjdk-8-jdk

验证 java8 是否已经安装成功:

java -version

有以下类似输出的话则表明安装成功:

openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-8u372-ga~us1-0ubuntu1~18.04-b09)
OpenJDK 64-Bit Server VM (build 25.362-b09, mixed mode)

安装 zookeeper

在 Ubuntu 上,您可以通过以下步骤安装 Apache Zookeeper 3.5.9:

  1. 下载 Apache Zookeeper 3.5.9 的二进制文件。使用以下命令下载并解压缩 Zookeeper:
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz
tar -xzf apache-zookeeper-3.5.9-bin.tar.gz
  1. 将解压缩后的文件夹移动到 /opt 目录中:
sudo mv apache-zookeeper-3.5.9-bin /opt/zookeeper-3.5.9
  1. /opt/zookeeper-3.5.9 目录中创建一个名为 data 的文件夹,用于存储 Zookeeper 的数据:
sudo mkdir /opt/zookeeper-3.5.9/data
  1. /opt/zookeeper-3.5.9/data 下创建 myid 文件并设置内容为 1,其他两台机器则为 23
echo 1 | sudo tee /opt/zookeeper-3.5.9/data/myid
  1. 复制 Zookeeper 配置文件样本,并将其命名为 zoo.cfg
sudo cp /opt/zookeeper-3.5.9/conf/zoo_sample.cfg /opt/zookeeper-3.5.9/conf/zoo.cfg
  1. 使用文本编辑器(例如 vim)编辑 zoo.cfg 文件:
sudo vim /opt/zookeeper-3.5.9/conf/zoo.cfg
  1. 修改 zoo.cfg 文件:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# 设置数据存储目录
dataDir=/opt/zookeeper-3.5.9/data
# the port at which the clients will connect
clientPort=2181
# 设置集群信息
server.1=kafka1.com:2888:3888
server.2=kafka2.com:2888:3888
server.3=kafka3.com:2888:3888

在 Zookeeper 的配置文件中,server.x=hostname:port1:port2 这种格式的配置项是用来设置 Zookeeper 集群(集群模式下)的。其中,x 是服务器的 ID,hostname 是服务器的主机名或 IP 地址,port1port2 是用于集群间通信的端口。

具体来说:

  • port1(2888):这是服务器之间用于相互通信的端口。Zookeeper 服务器使用这个端口进行 leader 选举以及同步 follower 和 leader 之间的状态。

  • port2(3888):这个端口用于服务器之间的 leader 选举。在 Zookeeper 集群启动或者在 leader 服务器崩溃后,follower 服务器会通过这个端口进行新一轮的 leader 选举。

这两个端口可以根据你的网络配置进行修改,但必须在所有的 Zookeeper 服务器上保持一致。

  1. 三个节点都启动 Zookeeper 服务器:
/opt/zookeeper/bin/zkServer.sh start

可以连接到 Zookeeper 的端口上(默认是 2181),通过发送四字命令 srvr 来验证 Zookeeper 是否安装正确(部署集群的话需要把所有 Zookeeper 启动):

hedon@ubuntu:/opt/zookeeper-3.5.9$ telnet localhost 2181
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
srvr
Zookeeper version: 3.5.9-83df9301aa5c2a5d284a9940177808c01bc35cef, built on 01/06/2021 19:49 GMT
Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: standalone
Node count: 5
Connection closed by foreign host.
  1. 要停止 Zookeeper 服务器,可以使用以下命令:
/opt/zookeeper/bin/zkServer.sh stop

安装 Kafka

  1. 下载并解压 Kafka

    wget https://archive.apache.org/dist/kafka/2.7.0/kafka_2.13-2.7.0.tgz
    tar -zxvf kafka_2.13-2.7.0.tgz
    
  2. 将解压缩后的文件夹移动到 /opt 目录中:

    sudo mv kafka_2.13-2.7.0 /opt/kafka-2.7.0
    
  3. 创建日志目录

    sudo mkdir /opt/kafka-2.7.0/kafka-logs
    
  4. 备份 Kafka 默认配置

    sudo cp /opt/kafka-2.7.0/config/server.properties /opt/kafka-2.7.0/config/server.properties.bak
    
  5. 修改 Kafka 配置

    sudo vim /opt/kafka-2.7.0/config/server.properties
    

    主要是修改下面几个配置:

    # 集群中每个 broker 的 id 必须唯一,这里分别为 1,2,3
    broker.id=1
    # 日志目录
    log.dirs=/opt/kafka-2.7.0/kafka-logs
    # 配置 Zookeeper
    zookeeper.connect=kafka1.com:2181,kafka2.com:2181,kafka3.com:2181
    # 定义 Kafka Broker 在哪些网络地址上监听连接,下面配置表示在所有的 IP 地址上监听 9092 端口
    listeners=PLAINTEXT://:9092
    # 定义 Kafka Broker 如何向外部公布它的地址。这是 Kafka Broker 通知 Producer 和 Consumer 如何连接到自己的方式。例如,如果你设置 advertised.listeners=PLAINTEXT://my.public.ip:9092,那么 Kafka Broker 将告诉 Producer 和 Consumer 它的公共 IP 地址是 my.public.ip,并且它在 9092 端口上监听连接。
    advertised.listeners=PLAINTEXT://kafka1.com:9092
    
  6. 三个节点都启动 Kafka

    /opt/kafka-2.7.0/bin/kafka-server-start.sh -daemon /opt/kafka-2.7.0/config/server.properties
    
  7. 选择任意一个节点创建一个新 topic

    /opt/kafka-2.7.0/bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --replication-factor 1 --partitions=2
    

    输出:

    Created topic test.
    
  8. 在其他节点获取 test 这个 topic 的信息

    /opt/kafka-2.7.0/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic test
    

    可以看到关于 test 这个 topic 的信息是可以获取到的,说明集群之前信息是互通的,集群搭建完毕。

    Topic: test	PartitionCount: 2	ReplicationFactor: 1	Configs: segment.bytes=1073741824Topic: test	Partition: 0	Leader: 1	Replicas: 1	Isr: 1Topic: test	Partition: 1	Leader: 2	Replicas: 2	Isr: 2
    

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

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

相关文章

彩纸屋在线少儿编程源码/scratch在线编程系统/培训管理系统源码/在线培训系统源码PHP

源码简介&#xff1a; 彩纸屋在线少儿编程源码&#xff0c;它是scratch在线编程系统&#xff0c;作为培训管理系统源码/在线培训系统源码&#xff0c;采用PHP源码。 彩纸屋是全国首家提供scratch开源定制和少儿编程培训管理系统源代码的服务商&#xff0c;彩纸屋提供的scratc…

flv视频轮播功能(单个时)

1.轮播思路 获取八个视频源的地址。 将这些地址分成两组&#xff0c;每组包含四个地址。 在页面中创建一个四分屏布局的视频播放器。 将第一组的四个视频地址分别插入到四分屏布局的四个视频框中。 设置一个定时器&#xff0c;每10秒执行一次。 每次定时器触发时&#xf…

c++日志单例实现

为了使项目的所有日志都打印到同一个日志中&#xff0c;必须使得所有类使用同一个日志&#xff0c;因此将日志类实现为单例。 .h文件 #pragma once#include<fstream>class LogHablee { private:LogHablee(std::string& dbg_dir);LogHablee(const LogHablee&) …

Postgresql BatchInsert唯一键冲突及解决

Postgresql BatchInsert唯一键冲突及解决 当有唯一键冲突时&#xff0c;批量插入可能会报错&#xff1b; insert into tableA(sno,name,age,emp) values(),(),(); 会报错 insert into tableA(sno,name,age,emp) values(),(),() on conflict on contraint tableA_unique_key do …

diff 算法

此文章可帮助读者快速了解diff算法的理论知识,参考其他文章结合自己理解 核心思想 Diff算法,至根节点到叶节点,从左到右,从上到下,依次遍历进行对比 应用场景 虚拟dom 再Vue中和React有应用到 将dom变化前和变化后的状态,而产生虚拟dom树,再path里面进行diff算法,最后操作…

腾讯云自研星星海双路服务器SA5实例AMD处理器性能测评

腾讯云服务器标准型SA5实例是最新一代的标准型实例&#xff0c;CPU采用AMD EPYC™ Bergamo全新处理器&#xff0c;采用最新DDR5内存&#xff0c;默认网络优化&#xff0c;最高内网收发能力达4500万pps。腾讯云百科txybk.com分享腾讯云标准型SA5云服务器CPU、内存、网络、性能、…

一条Update语句的执行过程是怎样的?

先看第一个问题&#xff0c;这里做个简单描述 &#xff0c;因为我们着重还是看Update MySQL执行一条Select语句是怎么运行的&#xff1f; 这个问题大家在面试的时候大家都背过类似的题&#xff0c;而且网上也有很多答案&#xff0c;这里分享一个大致流程介绍&#xff0c;关于…

docker network容器网络通信

Docker 网络主要有以下两个作用&#xff1a; 容器间的互联和通信以及端口映射容器IP变动时候可以通过服务名直接网络通信而不受到影响 只要是处于同一个Docker 网络下的容器就可以使用服务名直接访问&#xff0c;而无需担心重启。 docker容器网络模式 bridge网络模式&#…

工业级 S25HS01GTDPBHV030 NOR闪存,L9305EP汽车级驱动器IC,LMK03318RHSR时钟发生器,PLL(中文资料)

一、工业级 S25HS01GTDPBHV030 Semper™ NOR闪存 S25HS01GT SEMPER™ NOR Flash闪存系列是英飞凌高性能、安全而可靠的 NOR Flash解决方案。 它集成了适用于汽车、工业、通信等广泛应用的关键安全功能。 凭借 SEMPER™ NOR Flash闪存&#xff0c;英飞凌推出了业界首款符合 ASI…

多线程04 线程安全问题以及一些简单的解决策略

前言 首先我们引入多线程是为了解决多次创建进程和销毁进程带来的巨大开销,线程可以共享内存和硬盘资源等等,这里我们就会想,他们共享这些东西会不会涉及到一些安全问题呢?他们没有独立分配自己的资源是一定会有安全问题的,但是就目前在这个快节奏的社会来说,效率的提升是必然…

Python编程之魂之运算符的优先级教程

文章目录 前言优先级概述相同优先级结合性运算符优先级一览表运算符优先级重点说明结语关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资…

深度学习基于Python+TensorFlow+Django的水果识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介技术组合系统功能使用流程 二、功能三、系统四. 总结 一项目简介 # 深度学习基于PythonTensorFlowDjango的水果识别系统介绍 简介 该水果识别系统基于…

PaddleOCR学习笔记

Paddle 功能特性 PP-OCR系列模型列表 https://github.com/PaddlePaddle/PaddleOCR#%EF%B8%8F-pp-ocr%E7%B3%BB%E5%88%97%E6%A8%A1%E5%9E%8B%E5%88%97%E8%A1%A8%E6%9B%B4%E6%96%B0%E4%B8%AD PP-OCR系列模型列表&#xff08;V4&#xff0c;2023年8月1日更新&#xff09; 配置文…

【论文解读】Edit-DiffNeRF:使用2D-扩散模型编辑3D-NeRF

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2306.09551 摘要 最近的研究表明&#xff0c;将预训练的扩散模型与神经辐射场&#xff08;NeRF&#xff09;相结合&#xff0c;是一种很有前途的文本到 3D 的生成…

因特网的典型应用所使用的TCP/IP应用层协议和相应的传输层协议

因特网应用TCP/IP应用层协议TCP/IP传输层协议域名解析DNS&#xff08;域名系统&#xff09;UDP文件传送TFTP&#xff08;简单文件传送协议&#xff09;UDP路由选择RIP&#xff08;路由信息协议&#xff09;UDP网络参数配置DHCP&#xff08;动态主机配置协议&#xff09;UDP网络…

使用bard分析视频内容

11月21日的bard update 更新了分析视频的功能&#xff0c;使用方法如下&#xff1a; 1、打开bard网站。https://bard.google.com/ 2、点击插件。 3、点击YouTube中的 research a topic 选项。 4、输入需要分析的内容&#xff1a; Please analyze how many technologies are in…

企业计算机中了locked勒索病毒怎么解锁,locked勒索病毒解密,数据恢复

科技的进步为企业的生产生活提供了极大便利&#xff0c;但随之而来的网络安全威胁也不断增加&#xff0c;近期云天数据恢复中心陆续接到很多企业的求助&#xff0c;企业的计算机服务器遭到了locked勒索病毒攻击&#xff0c;导致企业的所有业务无法正常开展&#xff0c;所有计算…

接口测试场景:怎么实现登录之后,需要进行昵称修改?

在接口测试中有一个这样的场景&#xff1a;登录之后&#xff0c;需要进行昵称修改&#xff0c;怎么实现&#xff1f; 首先我们分别看下登录、昵称修改的接口说明&#xff1a; 以上业务中补充一点&#xff0c;昵称修改&#xff0c;还需要添加请求头Authorization传登录获取的to…

LeetCode Hot100 114.二叉树展开为链表

题目&#xff1a; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…

【docker】docker的基础命令

基础操作 docker info #查看docker的基本信息docker version #查看docker版本信息一、镜像操作 1、搜索镜像 docker search nginx2、下载镜像 docker pull nginx#从仓库中下载镜像&#xff0c;若没有指定标签&#xff0c;则下载最新的版本&#xff0c;也就是标签为: lat…