Kafka 安装部署


1、环境说明

1.1、服务器

单机部署

操作系统:CentOS Linux release 7.6.1810 (Core)

操作系统安装包:CentOS-7-x86_64-Minimal-1810.iso

JDK 版本:1.8

JDK 安装包:jdk-8u261-linux-x64.rpm

Kafka 版本:3.0.0

Kafka 安装包:kafka_2.13-3.0.0.tgz


docker 部署

docker 版本:1.13.1

python 版本:3.6.8

pip 版本:21.3.1

docker-compose 版本:1.29.2


集群部署

Zookeeper 版本:3.6.3

Zookeeper 安装包:apache-zookeeper-3.6.3.tar.gz

1.2、客户端

客户端

官网

操作系统:Windows 10(还支持其他的操作系统,详情查看官网)

客户端:kafkatool 2.2

问题:不支持 offset 放在 kafka consumer_offsets 的 customer 操作。不过可以做一些远程操作 创建/删除 topic ,查看集群状态,用起来还是比较方便的。

2、官网

Kafka 官方网站

安装手册(无法网络访问,示例可通过网络访问)

kafka 下载地址

3、单机安装部署

3.1、local 部署

3.1.1、安装 jdk

下载地址

# 安装 jdk
rpm -ivh jdk-8u261-linux-x64.rpm
# 查看版本
java -version

3.1.2、上传服务器&解压

# 解压
tar -xzf kafka_2.13-3.0.0.tgz
# 进入目录
cd kafka_2.13-3.0.0
# 创建日志目录
mkdir logs

3.1.3、修改配置文件,文件位置

cd /root/kafka_2.13-3.0.0/config
vi server.properties
# 集群中每台服务器要设置为唯一不相同的整数(示例为单机不需要修改)
broker.id=0

# 日志目录,也用于 Kafka 存储数据。(可以不更改,如更改 清空数据 需要清空对应的目录)
log.dirs=/root/kafka_2.13-3.0.0/logs

# zookeeper 集群配置(示例为单机不需要修改)
zookeeper.connect=192.168.1.1:2181

# 修改 IP 地址
listeners=PLAINTEXT://192.168.1.1:9092

3.1.4、启动服务

cd /root/kafka_2.13-3.0.0/
# start zookeeper
nohup bin/zookeeper-server-start.sh config/zookeeper.properties >./logs/stdoutzookeeper.log 2>&1 &
# 稍等一下 待 zookeeper 启动,再启动 kafka
# 检查 zookeeper 是否正常启动
jps
ss -ntl|grep 2181
# start kafka
nohup bin/kafka-server-start.sh config/server.properties >./logs/stdoutkafka.log 2>&1 &
# 查看服务是否启动
jps
ss -ntl|grep 9092

# 其他查看服务的命令
ps -ef|grep zookeeper
ps -ef|grep kafka

# 查看端口开放情况
firewall-cmd --zone=public --list-ports
# 开放端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service

3.1.5、测试

说明:可服务器本地测试,也可通过网络测试。

# create a topic
bin/kafka-topics.sh --create --partitions 1 --replication-factor 1 --topic quickstart-events --bootstrap-server 192.168.1.1:9092
# display usage information
bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server 192.168.1.1:9092

# WRITE SOME EVENTS INTO THE TOPIC (You can stop the producer client with Ctrl-C at any time.)
bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server 192.168.1.1:9092
This is my first event
This is my second event

# READ THE EVENTS
bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server 192.168.1.1:9092

3.1.6、停止服务

# 停止服务
cd /root/kafka_2.13-3.0.0/
bin/kafka-server-stop.sh
bin/zookeeper-server-stop.sh

# delete any data of your local Kafka environment including any events you have created along the way
rm -rf /tmp/kafka-logs /tmp/zookeeper
# or
rm -rf /root/kafka_2.13-3.0.0/logs/* /tmp/zookeeper

3.2、docker-compose 部署

3.2.1、参考网站

docker 部署 Kafka(网络不通,只能服务器内通过 docker 使用)

docker 部署 Kafka - Scenario 3: Kafka in Docker Compose(网络问题处理方法)

docker-compose 官方文档

3.2.2、安装&启动 docker

# 安装
yum -y install docker
# 启动
systemctl start docker
# 查看版本
docker version

3.2.3、安装 python & 更新 pip & 安装 docker-compose

# 安装 python
yum install python3 -y
# 查看版本
python3 -V
pip3 -V
# 更新 pip
python3 -m pip install --upgrade pip
# 安装 docker-compose
pip3 install docker-compose
# 查看 docker-compose 版本
docker-compose -version

# 新建文件夹
mkdir dockerComposeKafka
cd dockerComposeKafka
# 编辑文件
vi docker-compose.yml

文件 docker-compose.yml(网络不通)

---
version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:6.2.0
    container_name: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: confluentinc/cp-kafka:6.2.0
    container_name: broker
    ports:
    # To learn about configuring Kafka for access across networks see
    # https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/
      - "9092:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1

docker-compose.yml (可以通过网络访问)

---
version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:6.2.0
    container_name: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: confluentinc/cp-kafka:6.2.0
    container_name: broker
    ports:
    # To learn about configuring Kafka for access across networks see
    # https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/
      - "9092:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.1.1:9092,PLAINTEXT_INTERNAL://broker:29092
      LISTENERS: PLAINTEXT://192.168.1.1:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1

3.2.4、启动服务

# 查看端口开放情况
firewall-cmd --zone=public --list-ports
# 开放端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service

# 第一次需要下载镜像,需要的时间比较久
docker-compose up -d
# 查看日志
docker logs -f broker

3.2.5、测试

# Create a topic
docker exec broker \
kafka-topics --bootstrap-server broker:9092 \
             --create \
             --topic quickstart

# display usage information
docker exec broker \
kafka-topics --bootstrap-server broker:9092 \
             --describe \
             --topic quickstart

# Write messages to the topic
docker exec --interactive --tty broker \
kafka-console-producer --bootstrap-server broker:9092 \
                       --topic quickstart
# Type in some lines of text. Each line is a new message.
this is my first kafka message
hello world!
this is my third kafka message. I’m on a roll :-D
# Ctrl-D to return to your command prompt.

# Read messages from the topic
docker exec --interactive --tty broker \
kafka-console-consumer --bootstrap-server broker:9092 \
                       --topic quickstart \
                       --from-beginning

# Stop the Kafka broker
docker-compose down

# 强制停止并删除容器(异常情况)
docker rm -f broker zookeeper

4、集群安装

说明:集群中只要有半数以上节点存活,集群就能正常服务。因此,集群最少需要 3 台服务器。(2台服务器组成的集群,其中1台宕机,集群则会宕机了。3台服务器组成的集群,其中1台宕机,集群仍可正常服务。)

说明:没有做集群优化,仅安装部署。

首先确定 Kafka 对应的 Zookeeper 的版本。/root/kafka_2.13-3.0.0/libs 中可以看到 zookeeper-3.6.3.jar 文件。说明 Kafka 3.0.0 对应的 Zookeeper 版本为 3.6.3 。

4.1、Zookeeper 集群安装

说明:只存储集群信息,不存储offset,offset 放在 kafka consumer_offsets。(官方推荐)

Zookeeper 官网

Zookeeper 下载

安装步骤可参考之前的文章

需要注意:Zookeeper 集群安装步骤,除 myid 中写入的数字不同,其他操作 3台服务器相同即可。

安装 jdk

JDK 下载地址

# 安装 jdk
rpm -ivh jdk-8u261-linux-x64.rpm
# 查看版本
java -version

上传文件&解压

mkdir /opt/module
# 解压
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /opt/module/

修改配置

cd /opt/module/apache-zookeeper-3.6.3-bin
mkdir zkData
# 配置服务器编号(唯一标识)
cd zkData
touch myid
vi myid
# 写入唯一标识(数字)

# 配置
cd /opt/module/apache-zookeeper-3.6.3-bin/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

zoo.cfg 中需要修改的内容

dataDir=/opt/module/apache-zookeeper-3.6.3-bin/zkData
# server.A=B:C:D
# A 是一个数字,表示这个是第几号服务器
# B 是这个服务器的 IP 地址
# C 是这个服务器与集群中的 Leader 服务器交换信息的端口
# D 是万一服务器集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通讯的接口
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888

开放端口

# 查看端口开放情况
firewall-cmd --zone=public --list-ports
# 开放端口
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service

启动服务

cd /opt/module/apache-zookeeper-3.6.3-bin/
bin/zkServer.sh start
# 查看是否启动
jps
ss -ntl|grep 2181
# 查看状态(Mode: leader 或 Mode: follower)
bin/zkServer.sh status

# 启动客户端
bin/zkCli.sh
# 查看目录下的文件
ls /
# 退出客户端
quit

# 停止服务
bin/zkServer.sh stop

4.2、Kafka 集群安装

需要注意:Kafka 集群安装步骤,除 broker.id 、listeners 不同,其他操作 3台服务器相同即可。

4.2.1、上传服务器&解压

# 解压
tar -xzf kafka_2.13-3.0.0.tgz
# 进入目录
cd kafka_2.13-3.0.0
# 创建日志目录
mkdir logs

4.2.2、修改配置文件,文件位置

cd /root/kafka_2.13-3.0.0/config
vi server.properties

server.properties 中需要修改的内容

# 集群中每台服务器要设置为唯一不相同的整数
broker.id=0

# 日志目录,也用于 Kafka 存储数据。(可以不更改,如更改 清空数据 需要清空对应的目录)
log.dirs=/root/kafka_2.13-3.0.0/logs

# 配置 IP 地址
listeners=PLAINTEXT://192.168.1.1:9092

# zookeeper 集群配置
zookeeper.connect=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181

开放端口

# 查看端口开放情况
firewall-cmd --zone=public --list-ports
# 开放端口
firewall-cmd --zone=public --add-port=9092/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service

4.2.3、启动服务

cd /root/kafka_2.13-3.0.0/
# start kafka
nohup bin/kafka-server-start.sh config/server.properties >./logs/stdoutkafka.log 2>&1 &
# 查看服务是否启动
jps -l
ss -ntl|grep 9092

# 其他查看服务的命令
ps -ef|grep kafka

4.2.4、测试

通过 客户端 kafkatool 或者相关监控软件,可以看到 3 台服务器形成了一个 Kafka 集群。

4.2.5、停止服务

# 停止服务
cd /root/kafka_2.13-3.0.0/
bin/kafka-server-stop.sh

# delete any data of your local Kafka environment including any events you have created along the way
rm -rf /tmp/kafka-logs
# or
rm -rf /root/kafka_2.13-3.0.0/logs/*

5、总结

单机本地部署、Docker 部署(不需要网络访问),按照官网的方式即可。
通过 Docker 部署并需要网络访问的过程中,稍微曲折一点,参考文档稍微少一点。
集群部署需要掌握 Zookeeper 的集群部署方式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值