3台Centos7快速部署Kafka集群

首先,我要说,Kafka 是强依赖于 ZooKeeper 的,所以在设置 Kafka 集群之前,我们首先需要设置一个 ZooKeeper 集群。

部署ZooKeeper需要安装jdk
yum install java-1.8.0-openjdk

安装完以后

下面是详细的步骤:

1. 安装和配置 ZooKeeper 集群

1.1 下载 ZooKeeper:

bash 复制代码
cd /data1
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.3/apache-zookeeper-3.8.3-bin.tar.gz

1.2 解压缩:

bash 复制代码
tar -zxvf apache-zookeeper-3.8.3-bin.tar.gz
cd /data1/
mkdir kafka
mv apache-zookeeper-3.8.3-bin /data1/kafka/zookeeper

1.3 在每台机器上创建 myid 文件,并存放在一个特定的目录,例如 /data1/zookeeper_data。文件中的内容是每台机器的唯一ID,从 1 开始增加。

bash 复制代码
mkdir /data1/zookeeper_data
echo "1" > /data1/zookeeper_data/myid # 对于第二台机器为2,第三台为3

1.4 编辑 ZooKeeper 的配置文件:

bash 复制代码
cd /data1/kafka/zookeeper/conf
cp zoo_sample.cfg zoo.cfg

编辑 zoo.cfg:

bash 复制代码
vi zoo.cfg

添加/修改以下内容:

text 复制代码
dataDir=/data1/zookeeper_data
clientPort=2181
initLimit=10
syncLimit=5
tickTime=2000
server.1=192.142.25.119:2888:3888
server.2=192.142.25.120:2888:3888
server.3=192.142.25.121:2888:3888

2. 安装和配置 Kafka 集群

2.1 下载 Kafka:

bash 复制代码
cd /data1
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz

2.2 解压缩:

bash 复制代码
tar -zxvf kafka_2.13-3.6.0.tgz
mv kafka_2.13-3.6.0 /data1/kafka/kafka

2.3 编辑 Kafka 的配置文件:

bash 复制代码
cd /data1/kafka/kafka/config
vi server.properties

添加/修改以下内容:

text 复制代码
broker.id=1 # 对于第二台机器为2,第三台为3
zookeeper.connect=192.142.25.119:2181,192.142.25.120:2181,192.142.25.121:2181
log.dirs=/data1/kafka/kafka-logs

2.4 设置 Kafka 的堆内存:

bash 复制代码
export KAFKA_HEAP_OPTS="-Xmx2G -Xms2G"

3. 启动 ZooKeeper 和 Kafka 集群

在每台机器上:

bash 复制代码
# 启动 ZooKeeper(先把3台的zookeeper都启动,再分别启动kafka)
/data1/kafka/zookeeper/bin/zkServer.sh start

# 启动 Kafka
/data1/kafka/kafka/bin/kafka-server-start.sh /data1/kafka/kafka/config/server.properties &

4. Spring Boot 连接到 Kafka 集群

添加 Maven 依赖:

xml 复制代码
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>your_version</version>
</dependency>

配置 application.yml 或 application.properties:

yaml 复制代码
spring:
  kafka:
    bootstrap-servers: 192.142.25.119:9092,192.142.25.120:9092,192.142.25.121:9092

之后,你可以使用 @KafkaListenerKafkaTemplate 来进行消息的消费和生产。

注意:以上步骤提供了基本的集群设置,可能需要根据实际环境进行适当调整。尤其在生产环境中,需要考虑安全性、高可用性和性能优化等问题。




为 Kafka 设置身份验证通常涉及使用 SASL。在这里,我将向您展示如何使用 SASL/PLAIN 为 Kafka 设置简单的用户名和密码,并为 Spring Boot 提供相应的连接方式。

1. Kafka 设置使用 SASL/PLAIN:

1.1. 编辑 Kafka 的 server.properties:

bash 复制代码
cd /data1/kafka/kafka/config
vi server.properties

在文件中添加以下内容:

text 复制代码
listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

1.2. 在 Kafka 配置目录下创建一个 JAAS 配置文件,例如 kafka_server_jaas.conf:

bash 复制代码
vi /data1/kafka/kafka/config/kafka_server_jaas.conf

添加以下内容:

text 复制代码
KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret"
    user_otheruser="otherpassword";
};

在这里,我们创建了两个用户:adminotheruser

1.3. 在启动 Kafka 之前,设置以下环境变量:

bash 复制代码
export KAFKA_OPTS="-Djava.security.auth.login.config=/data1/kafka/kafka/config/kafka_server_jaas.conf"

1.4. 重启 Kafka 服务器以应用更改。

2. Spring Boot 连接到受密码保护的 Kafka:

2.1. 在您的 pom.xmlbuild.gradle 文件中确保已添加了以下依赖:

xml 复制代码
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>your_version</version>
</dependency>

2.2. 在 application.ymlapplication.properties 文件中添加以下内容:

yaml 复制代码
spring:
  kafka:
    bootstrap-servers: 192.142.25.119:9092,192.142.25.120:9092,192.142.25.121:9092
    consumer:
      group-id: your-group-id
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    properties:
      security.protocol: SASL_PLAINTEXT
      sasl.mechanism: PLAIN
      sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret";

这里我们使用了 admin 用户和对应的密码来连接到 Kafka。根据您的需求调整用户名和密码。

现在,您应该能够使用 Spring Boot 连接到受密码保护的 Kafka 集群并进行消息生产和消费。

注意:SASL/PLAIN 文本身份验证不提供传输安全性。在生产环境中,您应该考虑使用 SSL/TLS 与 SASL/PLAIN 结合来确保数据的机密性和完整性。

相关推荐
九皇叔叔1 小时前
Seata——把分布式事务理论落到 Java 微服务实践
分布式·分布式事务·cap·base·saga
程序员黎剑7 小时前
RabbitMQ-消息可靠性-publisher-confirm持久化与手动ack
分布式·rabbitmq·ruby
比奥利奥还傲.11 小时前
哪吒监控面板实战:部署 Dashboard、接入 Agent、钉钉告警,再配置固定公网访问
网络·人工智能·分布式·1024程序员节
A.说学逗唱的Coke19 小时前
【大模型专题】别再用 HTTP 直连 Agent 了:用 Kafka 承载 A2A 协议,从 PoC 走到生产
人工智能·kafka·a2a
拼图20920 小时前
Git常用语法
分布式·git·学习
用户531397318171 天前
[Kafka源码揭秘] 消息写入全链路:网络IO与请求入队
kafka·消息队列
swordbob1 天前
一个 Partition就是一个年级,一个消费者组占用1年级1班,另一个消费者组占用1年级2班,座位号(offset)可以相同,但班级号不同?
kafka
香吧香1 天前
Kafka 三节点集群:只订阅一个 broker 会丢消息吗?能用 VIP订阅 吗?
kafka
盟道科技1 天前
小程序订阅消息大规模投递实践:频控令牌池、Redis限流与失败补偿设计
分布式·算法·小程序
雾隐隐o1 天前
Kafka 生产者消息丢失:ACK、重试与可靠发送
kafka