• 3台Centos7快速部署Kafka集群


    首先,我要说,Kafka 是强依赖于 ZooKeeper 的,所以在设置 Kafka 集群之前,我们首先需要设置一个 ZooKeeper 集群。
    部署ZooKeeper需要安装jdk
    yum install java-1.8.0-openjdk
    安装完以后
    下面是详细的步骤:

    1. 安装和配置 ZooKeeper 集群

    1.1 下载 ZooKeeper:

    cd /data1
    wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.3/apache-zookeeper-3.8.3-bin.tar.gz
    
    • 1
    • 2

    1.2 解压缩:

    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
    • 2
    • 3
    • 4

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

    mkdir /data1/zookeeper_data
    echo "1" > /data1/zookeeper_data/myid # 对于第二台机器为2,第三台为3
    
    • 1
    • 2

    1.4 编辑 ZooKeeper 的配置文件:

    cd /data1/kafka/zookeeper/conf
    cp zoo_sample.cfg zoo.cfg
    
    • 1
    • 2

    编辑 zoo.cfg:

    vi zoo.cfg
    
    • 1

    添加/修改以下内容:

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. 安装和配置 Kafka 集群

    2.1 下载 Kafka:

    cd /data1
    wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
    
    • 1
    • 2

    2.2 解压缩:

    tar -zxvf kafka_2.13-3.6.0.tgz
    mv kafka_2.13-3.6.0 /data1/kafka/kafka
    
    • 1
    • 2

    2.3 编辑 Kafka 的配置文件:

    cd /data1/kafka/kafka/config
    vi server.properties
    
    • 1
    • 2

    添加/修改以下内容:

    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
    
    • 1
    • 2
    • 3

    2.4 设置 Kafka 的堆内存:

    export KAFKA_HEAP_OPTS="-Xmx2G -Xms2G"
    
    • 1

    3. 启动 ZooKeeper 和 Kafka 集群

    在每台机器上:

    # 启动 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 &
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4. Spring Boot 连接到 Kafka 集群

    添加 Maven 依赖:

    <dependency>
        <groupId>org.springframework.kafkagroupId>
        <artifactId>spring-kafkaartifactId>
        <version>your_versionversion>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置 application.yml 或 application.properties:

    spring:
      kafka:
        bootstrap-servers: 192.142.25.119:9092,192.142.25.120:9092,192.142.25.121:9092
    
    • 1
    • 2
    • 3

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

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




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

    1. Kafka 设置使用 SASL/PLAIN:

    1.1. 编辑 Kafka 的 server.properties:

    cd /data1/kafka/kafka/config
    vi server.properties
    
    • 1
    • 2

    在文件中添加以下内容:

    listeners=SASL_PLAINTEXT://:9092
    security.inter.broker.protocol=SASL_PLAINTEXT
    sasl.mechanism.inter.broker.protocol=PLAIN
    sasl.enabled.mechanisms=PLAIN
    
    • 1
    • 2
    • 3
    • 4

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

    vi /data1/kafka/kafka/config/kafka_server_jaas.conf
    
    • 1

    添加以下内容:

    KafkaServer {
        org.apache.kafka.common.security.plain.PlainLoginModule required
        username="admin"
        password="admin-secret"
        user_admin="admin-secret"
        user_otheruser="otherpassword";
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

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

    export KAFKA_OPTS="-Djava.security.auth.login.config=/data1/kafka/kafka/config/kafka_server_jaas.conf"
    
    • 1

    确实,当您直接在终端中执行export命令设置环境变量时,这些设置只对当前的shell会话有效。当会话结束或您关闭终端时,这些设置会丢失。为了让这些设置在每次用户登录或开启新的shell会话时都生效,您需要将这些export命令添加到某些特定的shell初始化文件中。

    以下是几种常见的shell以及相关的初始化文件:

    1. bash:

      • /etc/profile: 所有用户都会执行此文件。
      • ~/.bashrc~/.bash_profile: 只对特定用户生效。
    2. zsh:

      • /etc/zsh/zshenv: 所有用户都会执行此文件。
      • ~/.zshrc: 只对特定用户生效。

    根据您的需要和所用的shell,您可以选择将以下内容添加到相应的文件中:

    export KAFKA_HEAP_OPTS="-Xmx2G -Xms2G"
    export KAFKA_OPTS="-Djava.security.auth.login.config=/data1/kafka/kafka/config/kafka_server_jaas.conf"
    
    • 1
    • 2

    例如,如果您使用的是bash并希望这些设置对所有用户都生效,可以执行以下命令:

    echo 'export KAFKA_HEAP_OPTS="-Xmx2G -Xms2G"' | sudo tee -a /etc/profile
    echo 'export KAFKA_OPTS="-Djava.security.auth.login.config=/data1/kafka/kafka/config/kafka_server_jaas.conf"' | sudo tee -a /etc/profile
    
    • 1
    • 2

    或者,如果您只希望这些设置对当前用户生效,您可以将上述export命令添加到您的~/.bashrc~/.bash_profile中。

    完成上述步骤后,您可以通过执行source命令来重新加载配置文件,使设置立即生效,例如:

    source /etc/profile
    
    • 1

    或者

    source ~/.bashrc
    
    • 1

    这样,每次您登录或开启新的shell会话时,这些环境变量设置都会自动应用。

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

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

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

    <dependency>
        <groupId>org.springframework.kafkagroupId>
        <artifactId>spring-kafkaartifactId>
        <version>your_versionversion>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    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";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

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

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

  • 相关阅读:
    react、vue动态form表单
    移动机器人路径规划(五)--- 基于Minimun Snap的轨迹优化
    物联网毕设 -- ESP32-CAN加摄像头传输图像,STM32驱动小车自动避障图像采集并显示到Android端
    AI芯片软件定义硬件架构
    javascript: Sorting Algorithms
    CentOS下MySQL安装配置
    虚拟机搭建23年云计算技能大赛容器云平台
    「Java开发指南」如何用MyEclipse搭建Spring MVC应用程序?(一)
    Nginx笔记-vue项目刷新出现404(try_files和index)
    go 的结构体极速序列化
  • 原文地址:https://blog.csdn.net/u011197085/article/details/134070318