docker部署kafka,外部程序可以访问容器内的kafka

1. 编写docker-compose文件 zk_kafka.yml

version: '2'

services:

    zookeeper:
        image: hyperledger/fabric-zookeeper:2.0
        expose:
        - "2181"

    kafka:
      image: hyperledger/fabric-kafka:2.0
      depends_on:
      - zookeeper
      ports:
      - "9092:9092"
      expose:
      - "9093"
      environment:
        KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://appnode40:9092
        KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
        KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
        KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
        KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE

 

注意 OUTSIDE设置为容器所在宿主机的hostname,或者实际ip地址

 

2. 启动 docker  kafka容器

docker-compose -f zk_kafka.yml up -d

 

3. 外部应用程序连接kafka

在java代码中,指定 appnode40:9092即可

public static void main(String[] args) {
        int cnt = 0;
        String topic = "async";
        Properties props = new Properties();
        props.put("bootstrap.servers", "appnode40:9092");

        props.put("group.id", topic + "_group_id_00xx1");
        props.put("enable.auto.commit", "true");
        props.put("auto.commit.interval.ms", "1000");
        props.put("session.timeout.ms", "30000");
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
        consumer.subscribe(Arrays.asList(topic));
        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(100);
            for (ConsumerRecord<String, String> record : records) {
                System.out.printf((++cnt) + " --> partition = %s, offset = %d, key = %s, value = %s", record.partition(), record.offset(), record.key(), record.value());
                System.out.println();
            }
        }
}

 

4. 参考链接

https://xinze.fun/2019/11/11/%E4%BD%BF%E7%94%A8Docker%E9%83%A8%E7%BD%B2Kafka%E6%97%B6%E7%9A%84%E7%BD%91%E7%BB%9C%E5%BA%94%E8%AF%A5%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值