kafka的学习之一_带SASL鉴权的集群安装与启动

kafka,学习,之一,sasl,集群,安装,启动 · 浏览次数 : 56

小编点评

修改启动脚本: ```vim /root/kafka_2.13-3.5.0/bin/kafka-server-start.sh #添加以下内容 for i in {1,2,4,5,6} ; do ssh root@10.110.139.18${i} "cd /root/kafka_2.13-3.5.0 && bin/kafka-server-stop.sh config/kraft/server.properties \"; done #修改其他内容 ... #最后添加 for i in {1,2,4,5,6} ; do ssh root@10.110.139.18${i} "cd /root/kafka_2.13-3.5.0 && bin/kafka-server-start.sh -daemon config/kraft/server.properties \"; done #重启脚本 kill -rf /root/kafka_2.13-3.5.0/bin/kafka-server-stop.sh #重新初始化脚本 for i in {1,2,4,5,6} ; do ssh root@10.110.139.18${i} "cd /root/kafka_2.13-3.5.0 && bin/kafka-storage.sh format -t 7ONT3dn3RWWNCZyIwLrEqg -c config/kraft/server.properties \"; done #启动集群 for i in {1,2,4,5,6} ; do ssh root@10.110.139.18${i} "cd /root/kafka_2.13-3.5.0 && bin/kafka-server-start.sh -daemon config/kraft/server.properties \"; done #集群查看日志 tail -f /root/kafka_2.13-3.5.0/logs/kafkaServer.out ```

正文

kafka的学习之一_带SASL鉴权的集群安装与启动


背景

想开始一段新的里程.
可能会比现在累, 可能会需要更多的学习和努力.
kafka可能就是其中之一. 
自己之前总是畏缩不前. 不想面对很多压力.
年龄已经很大了, 必须得向前看继续努力了. 

关于kafka

kafka是linked开源的一套高效持久的消息平台. 
kafka 是基于弗兰兹·卡夫卡(Franz Kafka) 作者的名字来命令的. 
“卡夫卡”在捷克语中是“寒鸦”的意思,希伯来语中是"穴鸟"的意思. 跟中国的鸳鸯有一些相似的习性. 
善在某种意义上是绝望的表现 -kafka的名言之一. 

kafka是 LinkedIn 于2010年开发的消息系统
现阶段最新版本是 3.5 
下载地址为:
https://downloads.apache.org/kafka/3.5.0/kafka_2.13-3.5.0.tgz

关于kafka的结构

kafka 早起版本使用zookeeper 进行元数据管理
他的主要组件有:

1.producer:
  消息生产者,发布消息到 kafka 集群的终端或服务。
2.broker:
  kafka 集群中包含的服务器。
3.topic:
  每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。
4.partition:
  partition 是物理上的概念,每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。
5.consumer:
  从 kafka 集群中消费消息的终端或服务。
6.Consumer group:
  high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被 consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。
7.replica:
  partition 的副本,保障 partition 的高可用。
8.leader:
  replica 中的一个角色, producer 和 consumer 只跟 leader 交互。
9.follower:
  replica 中的一个角色,从 leader 中复制数据。
10.controller:
  kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。
12.zookeeper:
  kafka 通过 zookeeper 来存储集群的 meta 信息。

需要注意 kafka 在 3.3.1 的版本时使用 kraft 的一致性协议替换了zookeeper协议. 
一方面减少部署复杂度, 另一方面也减少与zookeeper的交换提高很多极端场景的新能. 

机器基本设置

修改机器名 分别修改为 broker1 到broker5
修改 hosts文件, 将IP地址和机器名进行对应关系设置. 

确保有java 可以直接运行, 有环境变量信息. 
在机器上面创建 ssh-keygen
然后设置机器可以免密访问
ssh-copy-id 
便于机器快速分发和处理

3controller+5broker的搭建过程

安装过程
注意为了简单, 我这边所有的机器都放到了 /root/kafka_2.13-3.5.0/
logs 使用的是 /logs 的目录信息

需要注意, 这次准备采用 SASL_PLAINTEXT 的协议进行处理. 
SASL_PLAINTEXT 使用 Simple Authentication and Security Layer(SASL)协议进行身份验证,
并使用PLAINTEXT机制来让Kafka进行网络通讯。
这使得用户名和密码在网络上传输时不再以明文形式传输,因此比PLAINTEXT更加安全。
注意, 这里仅是有了用户名和密码, 其实并不是很安全, 更安全的有 SSL和SASL_SSL,但是加解密的性能损耗较大

设置加密文件:
cat > /root/kafka_2.13-3.5.0/config/kafka_server_jaas.conf <<EOF
KafkaServer {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="Testxxxxxxxx"
  user_admin="Testxxxxxxxx"
  user_comsumer="Testxxxxxxxx"
  user_producer="Testxxxxxxxx";
};
EOF

# 增加一个客户端配置文件 客户端才可以连接服务器端
cat > /root/kafka_2.13-3.5.0/config/sasl.conf <<EOF
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="Testxxxxxxxx"; 
security.protocol=SASL_PLAINTEXT 
sasl.mechanism=PLAIN
EOF

然后可以讲这个文件分散到多个服务器上面
for i in {1,2,4,5,6} ; 
do scp /root/kafka_2.13-3.5.0/config/kafka_server_jaas.conf \
root@10.110.139.18${i}:/root/kafka_2.13-3.5.0/config/kafka_server_jaas.conf ;
done

for i in {1,2,4,5,6} ; 
do scp /root/kafka_2.13-3.5.0/config/sasl.conf \
root@10.110.139.18${i}:/root/kafka_2.13-3.5.0/config/sasl.conf ;
done

修改配置文件: vim /root/kafka_2.13-3.5.0/config/kraft/server.properties
主要修改内容如下:
1. role设置
#3个controller 里面如此设置
process.roles=broker,controller
#5个broker排除3个broker的设置为:
process.roles=broker

2. node.id
#注意需要按照顺序来不能一样
#我这边五个broker, 分别是 1,2,3,4,5了
node.id=1

3. controller quorum
controller.quorum.voters=1@10.110.139.184:9094,2@10.110.139.185:9094,3@10.110.139.186:9094
#这里主要是投票选leader用的. 

4. 设置监听
listeners=SASL_PLAINTEXT://10.110.139.184:9093,CONTROLLER://10.110.139.184:9094
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
security.inter.broker.protocol=SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://10.110.139.184:9093
allow.evervone.if.no.acl.found=true

# 需要注意的 advertised.listeners 的内容必须在 listeners 里面
# 9093 是 broker用的 9094 是 controller用的.

5. log.dirs=/logs
# 需要注意这个路径 建议是根据磁盘来.才能保证性能. 

修改启动脚本

vim /root/kafka_2.13-3.5.0/bin/kafka-server-start.sh 

注意可以修改一下jvm的设置然后进行启动:
export KAFKA_HEAP_OPTS="-Xmx4G -Xms4G  -Djava.security.auth.login.config=/root/kafka_2.13-3.5.0/config/kafka_server_jaas.conf "

初始化logs目录
# 第一步获取uuid
time /root/kafka_2.13-3.5.0/bin/kafka-storage.sh random-uuid
# 注意时间功能机器有关系 可能会比较长一些. 

# 第二步进行初始化:
# 注意如果之前设置过需要先清理 rm -rf /logs/ 注意目录跟 server.properties 的设置相关
bin/kafka-storage.sh format -t 7ONT3dn3RWWNCZyIwLrEqg  -c config/kraft/server.properties

需要注意 五个broker都需要进行设置. 

# 第三步设置 命令
# 比如kafka-topic.sh kafka-cluster.sh kafka-server-start.sh 等文件
# 内部增加配置文件
export KAFKA_OPTS="-Djava.security.auth.login.config=/root/kafka_2.13-3.5.0/config/kafka_server_jaas.conf"

启动脚本-第一部分

处理一下时间同步
for i in {1,2,4,5,6} ; 
do ssh root@10.110.139.18${i} "echo "nameserver 10.110.1.58" > /etc/resolv.conf "; 
done

for i in {1,2,4,5,6} ; 
do ssh root@10.110.139.18${i} "echo "203.107.6.88 ntp.aliyun.com" >>/etc/hosts "; 
done

for i in {1,2,4,5,6} ; 
do ssh root@10.110.139.18${i} "ntpdate ntp.aliyun.com "; 
done

关闭和启动脚本分别为:
for i in {1,2,4,5,6} ; 
do ssh root@10.110.139.18${i} "cd /root/kafka_2.13-3.5.0 && bin/kafka-server-stop.sh config/kraft/server.properties "; 
done

for i in {1,2,4,5,6} ; 
do ssh root@10.110.139.18${i} "cd /root/kafka_2.13-3.5.0 && bin/kafka-server-start.sh -daemon  config/kraft/server.properties "; 
done

重新初始化-第二部分

# 关闭
for i in {1,2,4,5,6} ; 
do ssh root@10.110.139.18${i} "cd /root/kafka_2.13-3.5.0 && bin/kafka-server-stop.sh config/kraft/server.properties "; 
done
# 删除
for i in {1,2,4,5,6} ; 
do ssh root@10.110.139.18${i} "rm -rf /logs/ "; 
done
# 初始化
for i in {1,2,4,5,6} ; 
do ssh root@10.110.139.18${i} "cd /root/kafka_2.13-3.5.0 && bin/kafka-storage.sh format -t 7ONT3dn3RWWNCZyIwLrEqg  -c config/kraft/server.properties "; 
done
# 启动
for i in {1,2,4,5,6} ; 
do ssh root@10.110.139.18${i} "cd /root/kafka_2.13-3.5.0 && bin/kafka-server-start.sh -daemon  config/kraft/server.properties "; 
done

集群查看

# 查看日志
tail -f /root/kafka_2.13-3.5.0/logs/kafkaServer.out

# 带日志启动
cd /root/kafka_2.13-3.5.0 && bin/kafka-server-start.sh   config/kraft/server.properties

# 简单查看
cd /root/kafka_2.13-3.5.0
bin/kafka-topics.sh --list --bootstrap-server 10.110.139.184:9093  --command-config config/sasl.conf

查看整个集群
bin/kafka-topics.sh --list --bootstrap-server 10.110.139.181:9093,10.110.139.182:9093,10.110.139.184:9093,10.110.139.185:9093,10.110.139.186:9093   --command-config config/sasl.conf

与kafka的学习之一_带SASL鉴权的集群安装与启动相似的内容:

kafka的学习之一_带SASL鉴权的集群安装与启动

# kafka的学习之一_带SASL鉴权的集群安装与启动 ## 背景 ``` 想开始一段新的里程. 可能会比现在累, 可能会需要更多的学习和努力. kafka可能就是其中之一. 自己之前总是畏缩不前. 不想面对很多压力. 年龄已经很大了, 必须得向前看继续努力了. ``` ## 关于kafka ``

strimzi实战之一:简介和准备

strimzi是个CNCF项目,功能是用于在kubernetes环境下部署和配置kafka,并提供了丰富的扩展功能,《strimzi实战》是欣宸新的系列原创,旨在与大家一起通过实战学习和掌握strimzi,并且深入源码

kafka的学习之二_kafka的压测与GUI管理

# kafka的学习之二_kafka的压测与GUI管理 ## 第一部分创建topic ``` cd /root/kafka_2.13-3.5.0 bin/kafka-topics.sh --create --bootstrap-server 10.110.139.184:9093 --command

Kafka学习之四_Grafana监控相关的学习

# Kafka学习之四_Grafana监控相关的学习 ## 背景 ``` 想一并学习一下kafaka的监控. 又重新开始学习grafana了: 下载地址: https://grafana.com/grafana/download https://prometheus.io/download/ htt

Jmeter学习之八_测试kafka

# Jmeter学习之八_测试kafka ## 背景 ``` 最近在持续学习. 昨天学习了grafana展示Jmeter测试数据库的结果 今天想着能够测试一下kafka验证一下kafka的吞吐量等信息 说干就干的. ``` ## 遇到的坑 ``` 本来计划使用pepper-box 或者是 kafka

kafka学习之五_多个磁盘的性能验证

# kafka学习之五_多个磁盘的性能验证 ## 背景 ``` 周末在家学习kafka 上午验证了grafana+kafka_exporter的监控 下午想着验证一把性能相关. kafka学习之三里面,有成套的脚本. 我这边想起来之前还有一个机器, 是四个单盘HDD, 我可以直接进行使用和验证. `

kafka学习之三_信创CPU下单节点kafka性能测试验证

# kafka学习之三_信创CPU下单节点kafka性能测试验证 ## 背景 ``` 前面学习了 3controller+5broker 的集群部署模式. 晚上想着能够验证一下国产机器的性能. 但是国产机器上面的设备有限. 所以想着进行单节点的安装与测试. 并且记录一下简单结果 希望对以后的工作有指

从Kafka中学习高性能系统如何设计

相信各位小伙伴之前或多或少接触过消息队列,比较知名的包含Rocket MQ和Kafka,在京东内部使用的是自研的消息中间件JMQ,从JMQ2升级到JMQ4的也是带来了性能上的明显提升,并且JMQ4的底层也是参考Kafka去做的设计。在这里我会给大家展示Kafka它的高性能是如何设计的,大家也可以学习相关方法论将其利用在实际项目中,也许下一个顶级项目就在各位的代码中产生了。

[转帖]Kafka 核心技术与实战学习笔记(六)kafka线上集群部署方案

一.操作系统-Linux Kafka是JVM系的大数据框架kafka由Scala语言和Java语言编写而成,编译之后的源代码就是普通的".class"文件 使用Linux kafka客户端底层使用Java的selector,selector在Linux上的实现机制是epoll,由于在windows上

kettle从入门到精通 第六十九课 ETL之kettle kettle cdc mysql,轻松实现实时增量同步

1、之前kettle cdc mysql的时候使用的方案是canal+kafka+kettle,今天我们一起学习下使用kettle的插件Debezium直接cdc mysql。 注:CDC (Change Data Capture) 是一种技术,用于捕获和同步数据库中的更改。 1)Debezium步