Kafka集群搭建_使用docker-compose

介绍

        Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

主要特性

​Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:
通过O的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
支持通过Kafka服务器和消费机集群来分区消息。
支持Hadoop并行数据加载。

下载安装docker-compose

#下载
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/v2.12.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#备用地址
wget https://github.com/docker/compose/releases/tag/v2.12.2/docker-compose-`uname -s`-`uname -m`​ > /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose
​
​
#可以查询版本号,已安装完成
#docker-compose version
Docker Compose version v2.12.2
​
#书写服务文件,设置开机自启
​
sudo vim /etc/systemd/system/docker-compose.service
​
#####
[Unit]
Description=Docker Compose
After=docker.service
​
[Service]
Type=simple
ExecStart=docker-compose -f /data/docker-compose/compose.yaml up
ExecStop=docker-compose -f /data/docker-compose/compose.yaml down
​
[Install]
WantedBy=multi-user.target
#####
# :set ff=unix
#####
​
sudo chmod +x /etc/systemd/system/docker-compose.service && sudo systemctl enable docker-compose
​
​
#使用时需要依赖yml文件操作

Kafka集群搭建

机器环境
hostnameipport
zoo1172.168.1.112184:2181
zoo2172.168.1.122185:2181
zoo3172.168.1.132186:2181
kafka1172.168.1.149092:9092
kafka2172.168.1.159093:9093
kafka3172.168.1.169094:9094

镜像准备

下载需要的images

docker pull zookeeper:3.4
docker pull wurstmeister/kafka:2.12-2.4.1

创建docker网络

Kafka和zookeeper需要在一个网段

docker network create --subnet 172.168.1.0/24 --gateway 172.168.1.1 kafka
docker network ls
 
编写docker-compose yml文件
vim docker-compose-kafka.yml

version: '3.4'
​
services: 
    zoo1:
        image: zookeeper:3.4
        restart: always
        hostname: zoo1
        container_name: zoo1
        ports:
            - 2184:2181
        volumes: 
            - "/home/zk/workspace/volumes/zkcluster/zoo1/data:/data"
            - "/home/zk/workspace/volumes/zkcluster/zoo1/datalog:/datalog"
        environment: 
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
        networks:
            kafka:
                ipv4_address: 172.168.1.11
​
    zoo2:
        image: zookeeper:3.4
        restart: always
        hostname: zoo2
        container_name: zoo2
        ports:
            - 2185:2181
        volumes: 
            - "/home/zk/workspace/volumes/zkcluster/zoo2/data:/data"
            - "/home/zk/workspace/volumes/zkcluster/zoo2/datalog:/datalog"
        environment: 
            ZOO_MY_ID: 2
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo3:2888:3888
        networks:
            kafka:
                ipv4_address: 172.168.1.12
​
    zoo3:
        image: zookeeper:3.4
        restart: always
        hostname: zoo3
        container_name: zoo3
        ports:
            - 2186:2181
        volumes: 
            - "/home/zk/workspace/volumes/zkcluster/zoo3/data:/data"
            - "/home/zk/workspace/volumes/zkcluster/zoo3/datalog:/datalog"
        environment: 
            ZOO_MY_ID: 3
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=0.0.0.0:2888:3888
        networks:
            kafka:
                ipv4_address: 172.168.1.13
​
    kafka1:
        image: wurstmeister/kafka:2.12-2.4.1
        restart: always
        hostname: kafka1
        container_name: kafka1
        privileged: true
        ports:
            - 9092:9092
        environment:
              KAFKA_ADVERTISED_HOST_NAME: kafka1
              KAFKA_LISTENERS: PLAINTEXT://kafka1:9092
              KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092
              KAFKA_ADVERTISED_PORT: 9092
              KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
        volumes:
            - /home/zk/workspace/volumes/kafkaCluster/kafka1/logs:/kafka
        networks:
            kafka:
                ipv4_address: 172.168.1.14
        extra_hosts: 
            - "zoo1:172.168.1.11"
            - "zoo2:172.168.1.12"
            - "zoo3:172.168.1.13"
        depends_on: 
            - zoo1
            - zoo2
            - zoo3
        external_links: 
            - zoo1
            - zoo2
            - zoo3
​
    kafka2:
        image: wurstmeister/kafka:2.12-2.4.1
        restart: always
        hostname: kafka2
        container_name: kafka2
        privileged: true
        ports:
            - 9093:9093
        environment:
              KAFKA_ADVERTISED_HOST_NAME: kafka2
              KAFKA_LISTENERS: PLAINTEXT://kafka2:9093
              KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9093
              KAFKA_ADVERTISED_PORT: 9093
              KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
        volumes:
            - /home/zk/workspace/volumes/kafkaCluster/kafka2/logs:/kafka
        networks:
            kafka:
                ipv4_address: 172.168.1.15
        extra_hosts: 
            - "zoo1:172.168.1.11"
            - "zoo2:172.168.1.12"
            - "zoo3:172.168.1.13"                
        depends_on: 
            - zoo1
            - zoo2
            - zoo3                
        external_links: 
            - zoo1
            - zoo2
            - zoo3           
​
    kafka3:
        image: wurstmeister/kafka:2.12-2.4.1
        restart: always
        hostname: kafka3
        container_name: kafka3
        privileged: true
        ports:
            - 9094:9094
        environment:
              KAFKA_ADVERTISED_HOST_NAME: kafka3
              KAFKA_LISTENERS: PLAINTEXT://kafka3:9094
              KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9094
              KAFKA_ADVERTISED_PORT: 9094
              KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
        volumes:
            - /home/zk/workspace/volumes/kafkaCluster/kafka3/logs:/kafka
        networks:
            kafka:
                ipv4_address: 172.168.1.16
        extra_hosts: 
            - "zoo1:172.168.1.11"
            - "zoo2:172.168.1.12"
            - "zoo3:172.168.1.13"                
        depends_on: 
            - zoo1
            - zoo2
            - zoo3                
        external_links: 
            - zoo1
            - zoo2
            - zoo3
​
networks: 
    kafka:
        external: 
            name: kafka

启动docker
$ docker-compose -f docker-compose-kafka.yml up -d
WARN[0000] network kafka: network.external.name is deprecated in favor of network.name 
[+] Running 6/6
 ⠿ Container zoo3    Started                                                                                                                                                  3.0s
 ⠿ Container zoo1    Started                                                                                                                                                  0.9s
 ⠿ Container zoo2    Started                                                                                                                                                  2.0s
 ⠿ Container kafka2  Started                                                                                                                                                  4.8s
 ⠿ Container kafka3  Started                                                                                                                                                  5.9s
 ⠿ Container kafka1  Started                                                                                                                                                  3.7s
 
 
$ docker ps 
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                            NAMES
e638df8e5208        wurstmeister/kafka:2.12-2.4.1   "start-kafka.sh"         3 minutes ago       Up 3 minutes        0.0.0.0:9093->9093/tcp                           kafka2
4f729dbd034c        wurstmeister/kafka:2.12-2.4.1   "start-kafka.sh"         3 minutes ago       Up 3 minutes        0.0.0.0:9094->9094/tcp                           kafka3
b9c74e313964        wurstmeister/kafka:2.12-2.4.1   "start-kafka.sh"         3 minutes ago       Up 3 minutes        0.0.0.0:9092->9092/tcp                           kafka1
80dbde171504        zookeeper:3.4                   "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes        2888/tcp, 3888/tcp, 0.0.0.0:2184->2181/tcp       zoo1
8036a4321256        zookeeper:3.4                   "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes        2888/tcp, 3888/tcp, 0.0.0.0:2185->2181/tcp       zoo2
3f2d6c3b899b        zookeeper:3.4                   "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes        2888/tcp, 3888/tcp, 0.0.0.0:2186->2181/tcp       zoo3

测试消息队列

kafka1发布消息,kafka2可以收到

访问kafk1
$ docker exec -it kafka1 /bin/bash
# 在容器中执行
# 创建topic
$ cd /opt/kafka_2.12-2.4.1/bin/
$ kafka-topics.sh --create --topic test1 --replication-factor 3 --partitions 2 --zookeeper 1.14.71.228:2184
Created topic test1.
​
$ kafka-topics.sh --list --zookeeper 10.0.0.6:2184
test1
​
$ sh /opt/kafka_2.12-2.4.1/bin/kafka-console-producer.sh --broker-list 10.0.0.6:9092 --topic test1
>test
>这是一个测试消息
>消息发送
>消息收到
访问kafk2
$ docker exec -it kafka2 /bin/bash
$ sh /opt/kafka_2.12-2.4.1/bin/kafka-console-consumer.sh --bootstrap-server 10.0.0.6:9092 --topic test1 --from-beginning
test
这是一个测试消息
消息发送
消息收到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值