Kafka新节点加入集群操作指南

ops/2024/11/19 5:21:12/

一、环境准备

1. Java环境安装

# 安装JDK
apt-get update
apt-get install openjdk-8-jdk -y

2. 下载并解压

wget https://archive.apache.org/dist/kafka/2.8.1/kafka_2.13-2.8.1.tgz
tar xf kafka_2.13-2.8.1.tgz
mv kafka_2.13-2.8.1 kafka

二、配置环境变量

kafkash_18">1. 创建kafka.sh

vim /etc/profile.d/kafka.sh# 添加以下内容
export KAFKA_HOME=/data/kafka
export PATH=$PATH:$KAFKA_HOME/bin
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export KAFKA_OPTS="-Djava.security.auth.login.config=/data/kafka/config/kafka_jaas.conf"

2. 使环境变量生效

source /etc/profile.d/kafka.sh

三、配置文件准备

拷贝之前的

1. 修改server.properties

# 基础配置
broker.id=4  # 确保集群中唯一
delete.topic.enable=true# 认证配置
listeners=SASL_PLAINTEXT://172.24.77.18:9092  # 修改为本机IP
advertised.listeners=SASL_PLAINTEXT://172.24.77.18:9092  # 修改为本机IP
inter.broker.listener.name=SASL_PLAINTEXT
security.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256,PLAIN# ACL配置
allow.everyone.if.no.acl.found=true
super.users=User:super
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer# 性能配置
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600# 日志配置
log.dirs=/data/kafka/data
num.partitions=3
num.recovery.threads.per.data.dir=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000# ZooKeeper配置
zookeeper.connect=172.24.77.13:2181,172.24.77.14:2181  # 修改为实际ZK地址
zookeeper.connection.timeout.ms=18000
zookeeper.set.acl=true# 复制配置
default.replication.factor=3
min.insync.replicas=2

kafka_jaasconf_81">2. 配置kafka_jaas.conf

KafkaServer {org.apache.kafka.common.security.scram.ScramLoginModule requiredusername="super"password="super_password";
};
Client {org.apache.zookeeper.server.auth.DigestLoginModule requiredusername="super"password="super_password";
};
# 客户端会youxian
KafkaClient {    org.apache.kafka.common.security.scram.ScramLoginModule requiredusername="super"password="super_password";
};

3. 配置admin-config.properties

sasl.mechanism=SCRAM-SHA-256
security.protocol=SASL_PLAINTEXT
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \username="super" \password="super_password";

四、启动服务

1. 启动Kafka

cd /data/kafka
bin/kafka-server-start.sh -daemon config/server.properties

2. 检查启动状态

# 查看进程
jps | grep Kafka# 查看日志
tail -200 /data/kafka/logs/server.log

五、验证配置并迁移topic

1. 检查集群状态

# 创建测试主题
bin/kafka-topics.sh --create \--topic test \--partitions 3 \--replication-factor 3 \--bootstrap-server localhost:9092 \--command-config config/admin-config.properties# 查看主题信息
bin/kafka-topics.sh --describe \--topic test \--bootstrap-server localhost:9092 \--command-config config/admin-config.properties

2. 验证复制

# 检查topic
bin/kafka-topics.sh --list     --bootstrap-server 172.24.77.18:9092     --command-config config/admin-config.properties
# 检查分区分布
bin/kafka-topics.sh --describe \--topic test-cluster \--bootstrap-server 172.24.77.18:9092 \--command-config config/admin-config.properties

3. 查看节点状态

[zk: localhost:2181(CONNECTED) 2] ls /brokers/ids
[1, 2, 3, 4]
[zk: localhost:2181(CONNECTED) 3] get /brokers/ids/4
{"features":{},"listener_security_protocol_map":{"SASL_PLAINTEXT":"SASL_PLAINTEXT"},"endpoints":["SASL_PLAINTEXT://172.24.77.18:9092"],"jmx_port":-1,"port":-1,"host":null,"version":5,"timestamp":"1731397341315"}

说明节点加入成功了

4. 假装broker3不要了,换成broker4
# 查看当前topic详情
bin/kafka-topics.sh --describe \--topic test-cluster \--bootstrap-server 172.24.77.18:9092 \--command-config config/admin-config.properties# 当前状态:
Topic: test-cluster	
Partition: 0	Leader: 1	Replicas: 3,2,1	Isr: 1
Partition: 1	Leader: 1	Replicas: 2,3,1	Isr: 1
Partition: 2	Leader: 1	Replicas: 2,1,3	Isr: 1
5. 执行分区重新分配
# 1. 先列出要迁移的topics
cat > move-topics.json << EOF
{"topics": [{"topic": "test-cluster"}],"version": 1
}
EOF# 2. 生成迁移计划
bin/kafka-reassign-partitions.sh \--bootstrap-server 172.24.77.18:9092 \--command-config config/admin-config.properties \--topics-to-move-json-file move-topics.json \--broker-list "1,2,4" \--generate
会有两段json配置,当前分区信息和预分配的分区信息
Current partition replica assignment   ---这个保存下来回滚使用
...
Proposed partition reassignment configuration   ---这个迁移使用
...
# 3.  reassignment.json`Proposed partition reassignment configuration`下的内容放到reassignment.json里
# 4. 执行迁移并限流,限流100MB
bin/kafka-reassign-partitions.sh   --bootstrap-server 172.24.77.18:9092   --command-config config/admin-config.properties \
--reassignment-json-file reassignment.json   --execute   --throttle 100000000# 5. 迁移后解除限流可以使用--verify参数,验证的同时解除限流
bin/kafka-reassign-partitions.sh \--bootstrap-server 172.24.77.18:9092 \--command-config config/admin-config.properties \--reassignment-json-file reassignment.json \--verify
提示:
Clearing broker-level throttles on brokers ...  # 清除 broker 级别的限流
Clearing topic-level throttles on topic ...     # 清除 topic 级别的限流验证过程:
先检查所有分区的迁移状态
如果迁移完成,自动清除 broker 级别的限流
自动清除 topic 级别的限流

6. 理解限流的影响

Broker1: - topic-A (迁移中)- topic-B (正常)- topic-C (正常)Broker2:- topic-D (完全不参与迁移)Broker1 参与迁移,所以它上面的 topic-A、B、C 都会受到带宽限制
Broker2 没参与迁移,完全不受影响所以在生产环境中要注意:
合理设置限流值,考虑到 broker 上其他 topic 的正常运行
尽量在业务低峰期进行迁移
可以分批迁移 topic,避免影响面过大# 查看topic详细信息$ /data/kafka/bin/kafka-topics.sh --describe --topic test-cluster \--bootstrap-server 172.24.77.18:9092 --command-config config/admin-config.properties

六、故障排查

1. 常见问题检查

# 检查端口
netstat -nltp | grep 9092# 检查连接
telnet localhost 9092# 检查ZK连接
echo stat | nc localhost 2181

2. 日志检查

# 检查Kafka日志
tail -f /data/kafka/logs/server.log# 检查系统日志
journalctl -u kafka

http://www.ppmy.cn/ops/134875.html

相关文章

力扣经典面试题

1.本题的目标是判断字符串ransomNote是否由字符串magazine中的字符构成&#xff0c;且由magazine中的每个字符只能在ransomNote中使用一次 2.采用的方法是通过一个字典cahr_countl来统计magazine字符串中每个字符出现的次数 3.然后遍历ransomNote字符串&#xff0c;对于其中的…

FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API

继这篇博客之后 从零开始FastGPT本地部署|Windows 有同学问&#xff0c;不想在多个平台申请API-Key&#xff0c;不好管理且要付费&#xff0c;有木有白嫖方案呀&#xff1f; 答&#xff1a;有啊。用硅基流动。 注册方法看这篇 【1024送福利】硅基流动送2000万token啦&#xff0…

笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像

很简单的起因&#xff0c;我的东西最终需要跑在amd64上&#xff0c;但是因为mac的架构师arm64&#xff0c;所以直接构建好的代码是没办法跨平台运行的。直接在arm64上pull下来的docker镜像也都是arm64架构。 检查镜像架构&#xff1a; docker inspect 8135f475e221 | grep Arc…

Qt 5.6.3 手动配置 mingw 环境

- 安装 qt 5.6.3 mingw 版 - 打开 qt creator - 找到选项 工具 - 选项- 构建和运行 - 找到 “编译器” 选项卡 ,点击 "添加" “编译器路径” 设置为 qt 安装目录下&#xff0c; tool 文件夹内的 g.exe 设置完成后&#xff0c;点击 "apply" ,使选项生…

Ubuntu24.04安装和配置Redis7.4

Ubuntu24.04安装和配置Redis7.4 #切换到root用户 sudo su -#更新源 apt update apt upgrade#安装 lsb-release、curl 和 gpg &#xff0c;以便能够添加 Redis 仓库 apt install lsb-release curl gpg#导入 Redis 的 GPG 密钥 curl -fsSL https://packages.redis.io/gpg | gpg …

华纳云:数据库一般购买什么服务器好?有哪些建议

选择数据库服务器时&#xff0c;需要考虑数据库的类型(如关系型数据库或NoSQL数据库)、数据量、并发访问量、读写频率、数据安全性要求等因素。以下是一些通用的建议&#xff0c;以帮助你选择合适的数据库服务器&#xff1a; 硬件配置推荐&#xff1a; 1. CPU&#xff1a;数据库…

HBase理论_HBase架构组件介绍

近来有些空闲时间&#xff0c;正好最近也在开发HBase相关内容&#xff0c;借此整理一下学习和对HBase组件的架构的记录和个人感受&#xff0c;付出了老夫不少心血啊&#xff0c;主要介绍的就是HBase的架构设计以及我的拓展内容。内容如有不当或有其他理解 matirx70163.com HB…

深入探讨 .NET Core 3.0 浮点计算差异与解决方案

在 .NET Core 3.0 中&#xff0c;对浮点解析和格式进行了更改&#xff0c;以符合 IEEE 754-2008 标准。您可以在这篇文章中阅读有关这些更改的更多信息。在使用 Stimulsoft 产品时&#xff0c;这些更改最常表现为舍入数字和出现“负号”零。 Stimulsoft Ultimate &#xff08;…