云服务器使用docker-compose安装kafka

查了一些资料,终于改好了,整理一下发出来,记录一下,希望能帮到遇到问题的人

容器选择

本次使用bitnami/kafka,其实他们文档已经写得挺清楚了,但是我也是改了一段时间才改完,希望能方便不想看文档的兄弟们

docker-compose.yml

文件中除了宿主机外网ip需要改,其他地方基本不需要改

version: '3.0'
services:
  zookeeper:
    image: 'bitnami/zookeeper:latest'
    ports:
      - '2181:2181'
    environment:
      # 匿名登录
      - ALLOW_ANONYMOUS_LOGIN=yes
   # volumes:
   #   - ./zookeeper:/bitnami/zookeeper
  kafka:
    image: 'bitnami/kafka:2.8.0'
    ports:
      - '9092:9092'
    environment:
      # 配置broker id
      - KAFKA_BROKER_ID=1
      # 配置监听者的安全协议
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
      # 定义Kafka Broker的Listener的配置项,配置外部访问和内部访问
      - KAFKA_CFG_LISTENERS=INTERNAL://:9093,OUTSIDE://:9092
      # 将Broker的Listener信息发布到Zookeeper中,供Clients(Producer/Consumer)使用
      - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka:9093,OUTSIDE://宿主机外网ip:9092
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
      # 全局消息过期时间
      - KAFKA_CFG_LOG_RETENTION_HOURS=6
   # volumes:
   #   - ./kafka:/bitnami/kafka
    depends_on:
      - zookeeper

内外网隔离配置

  • KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP:监听器名称和安全协议的映射配置。每个监听器的名称只能在map中出现一次。
  • KAFKA_CFG_INTER_BROKER_LISTENER_NAME:用于配置broker之间通信使用的监听器名称
  • KAFKA_CFG_LISTENERS:用于配置broker监听的URI以及监听器名称列表
  • KAFKA_CFG_ADVERTISED_LISTENERS:将该地址发布到zookeeper供客户端使用
    数据卷可以自己打开使用,这个容器时非root容器,所以创建挂载目录时候需要将文件夹权限打开!!

启动容器

docker-compose up

测试生产

使用kafka-client测试,client版本不能低于kafka版本,避免遇到各种意外

  1. 引入依赖
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>2.8.0</version>
        </dependency>
  1. 写代码
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        Map<String,Object> configs = new HashMap<>();

        configs.put("bootstrap.servers","宿主机外网ip:9092");
        configs.put("key.serializer", IntegerSerializer.class);
        configs.put("value.serializer", StringSerializer.class);

        KafkaProducer<Integer,String> producer = new KafkaProducer<Integer, String>(configs);


        ProducerRecord<Integer,String> record = new ProducerRecord<>(
                "topic_1",0,12,"shall"
        );

        Future<RecordMetadata> send = producer.send(record);
        RecordMetadata recordMetadata = send.get();

        String topic = recordMetadata.topic();
        Integer partition = recordMetadata.partition();
        long offset = recordMetadata.offset();

        System.out.println("主题:"+topic + ",分区:" + partition + ",偏移量:" + offset);

        producer.close();

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值