kafka伪集群部署,使用zookeeper模式

1:拉去管理kafka界面UI镜像

bash 复制代码
docker pull provectuslabs/kafka-ui

2:拉去管理kafka镜像

bash 复制代码
docker pull bitnami/kafka

3:docker-compose.yml

yml 复制代码
version: '3.8'
services:
  zookeeper-1:
    container_name: zookeeper1
    image: bitnami/zookeeper
    ports:
      - "2181:2181"
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes

  kafka-1:
    container_name: kafka1
    image: bitnami/kafka	
    ports:
      - "19092:19092"

    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.11.50:2181
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.50:19092
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:19092
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=1
      
  kafka-2:
    container_name: kafka2
    image: bitnami/kafka
    ports:
      - "29092:29092"
      

    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.11.50:2181
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.50:29092
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:29092
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=2 
    depends_on:
      - kafka-1
      
  kafka-3:
    container_name: kafka3
    image: bitnami/kafka
    ports:
      - "39092:39092"
    
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.11.50:2181
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.50:39092
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:39092
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=3
      
    depends_on:
      - kafka-1
      - kafka-2

  kafka-ui:
    container_name: kafka-ui
    image: provectuslabs/kafka-ui
    ports:
      - "8080:8080"
    environment:
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=192.168.11.50:19092,192.168.11.50:29092,192.168.11.50:39092

4:springboot项目发布和消费kafka

4-1:application.yml

yml 复制代码
server:
  port: 9088

spring:
  kafka:
    consumer:
      bootstrap-servers: localhost:19092,localhost:29093,localhost:39092
      group-id: test-group
      auto-offset-reset: earliest
    producer:
      bootstrap-servers: localhost:19092,localhost:29092,localhost:39092
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer

4-2:消费者

java 复制代码
package com.example.kafkademo.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;

/**
 * @Author xu
 * @create 2023/9/27 19
 */
@Service
public class KafkaConsumerService {

    private static final Logger LOGGER = LoggerFactory.getLogger(KafkaConsumerService.class);

    @KafkaListener(topics = "topic")
    public void receiveMessage(String message) {
        LOGGER.info("received message='{}'", message);
    }
}

4-3:生产者

java 复制代码
package com.example.kafkademo.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;

/**
 * @Author xu
 * @create 2023/9/27 19
 */
@Service
public class KafkaProducerService {

    private static final Logger LOGGER = LoggerFactory.getLogger(KafkaProducerService.class);

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    public void sendMessage(String topic, String message) {
        LOGGER.info("sending message='{}' to topic='{}'", message, topic);
        kafkaTemplate.send(topic, message);
    }
}

4-4:controller

java 复制代码
package com.example.kafkademo.controller;

import com.example.kafkademo.config.KafkaProducerService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @Author xu
 * @create 2023/9/27 19
 */
@RestController
public class KafkaController {
    @Resource
    KafkaProducerService kafkaProducerService;

    @PostMapping("/publish")
    public String publish(String topic,String content){
        kafkaProducerService.sendMessage("topic",content);
        System.out.println("content");
        return content;
    }
}

4-5:pom

java 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.16</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>kafkaDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>kafkaDemo</name>
    <description>kafkaDemo</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

5:命令行方式启动kafka

bash 复制代码
docker run -d --name kafka2 -p 19092:19092 -e KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.11.50:2181 -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.50:19092  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:19092 -e ALLOW_PLAINTEXT_LISTENER=yes -e KAFKA_BROKER_ID=2 bitnami/kafka

6:命令行方式启动kafka-ui

bash 复制代码
docker run -d --name kafka-ui -p 8080:8080 -e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=192.168.11.50:19092 provectuslabs/kafka-ui

7:命令行方式启动zookeeper

bash 复制代码
docker run -d --name zookeeper -p 2181:2181 -e ALLOW_ANONYMOUS_LOGIN=yes bitnami/zookeeper
相关推荐
武子康2 小时前
Java-72 深入浅出 RPC Dubbo 上手 生产者模块详解
java·spring boot·分布式·后端·rpc·dubbo·nio
橘子在努力5 小时前
【橘子分布式】Thrift RPC(理论篇)
分布式·网络协议·rpc
lifallen7 小时前
Kafka 时间轮深度解析:如何O(1)处理定时任务
java·数据结构·分布式·后端·算法·kafka
沈健_算法小生10 小时前
基于SpringBoot3集成Kafka集群
分布式·kafka·linq
Swift社区10 小时前
ELK、Loki、Kafka 三种日志告警联动方案全解析(附实战 Demo)
分布式·elk·kafka
chanalbert19 小时前
Nacos 技术研究文档(基于 Nacos 3)
spring boot·分布式·spring cloud
线条120 小时前
Spark 单机模式安装与测试全攻略
大数据·分布式·spark
C182981825751 天前
分布式ID 与自增区别
分布式
码字的字节1 天前
深入解析Hadoop架构设计:原理、组件与应用
大数据·hadoop·分布式·hadoop架构设计
悟能不能悟1 天前
Dubbo跨越分布式事务的最终一致性陷阱
分布式·wpf·dubbo