Docker部署kafka

16 篇文章 0 订阅
3 篇文章 0 订阅

Docker 部署Kafka

1. 环境准备

  1. 安装Centos7.8

    https://blog.csdn.net/u013071014/article/details/116843786?spm=1001.2014.3001.5501

  2. 安装docker

    https://blog.csdn.net/u013071014/article/details/118220743?spm=1001.2014.3001.5501

  3. 安装python环境

    yum -y install epel-release
    
    yum install python3 python3-setuptools python3-pip python3-ldap python3-devel gcc gcc-c++ -y
    
    pip3 install --timeout=3600 Pillow pylibmc captcha jinja2 sqlalchemy==1.3.8 psd-tools django-pylibmc django-simple-captcha
    
  4. 安装docker-compose

    cd /usr/local/bin/
    wget https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-Linux-x86_64
    rename docker-compose-Linux-x86_64 docker-compose docker-compose-Linux-x86_64
    chmod +x /usr/local/bin/docker-compose
    

2. 安装kafka

  1. docker-compose.yml 放到/opt 目录下

    version: '2'
    services:
      zookeeper:
        image: zookeeper
        volumes:
          - /opt/zookeeper:/data
        ports:
          - "2181:2181"
           
      kafka:
        image: wurstmeister/kafka
        ports:
          - "9092:9092"
        environment:
          KAFKA_ADVERTISED_HOST_NAME: 192.168.200.236
          KAFKA_MESSAGE_MAX_BYTES: 2000000  # kafka(message.max.bytes) 会接收单个消息size的最大限制,默认值为1000000 , ≈1M
          KAFKA_CREATE_TOPICS: "topic_for_nifi:3:1" # 初始创建的topics,可以不设置, topic名称:partition数:replicas数
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
        volumes:
          - ./kafka-logs:/kafka
          - /opt/kafka/docker.sock:/var/run/docker.sock
     
      kafka-manager:
        image: kafkamanager/kafka-manager
        ports:
          - 9020:9000
        environment:
          ZK_HOSTS: zookeeper:2181
    
  2. 启动

    docker-compose up -d
    

3. web配置kafka

页面访问 http://192.168.200.236:9020 进入kafka管理页面

  1. 第一次访问,需创建一个cluster
    在这里插入图片描述
    在这里插入图片描述

  2. 创建topic
    在这里插入图片描述

4. 查看topic及数据

在kafka-manager管理页面可以查看topic对应的Summed Recent Offsets(数据偏移量)来判断topic中是否写入了数据,但是不够准确。我们可以进入docker 容器中查看具体数据信息:

# 进入kafka 容器
docker exec -it 53c36b8b4879 /bin/bash

# 查看kafka所有的topic
kafka-topics.sh --zookeeper 192.168.200.254:2181 --list

# 查看topic的详细信息
kafka-topics.sh --describe --zookeeper 192.168.200.254:2181 --topic topic_for_nifi

# 通过消费者查看topic数据(如果有数据,说明之前的数据写入是成功的)
kafka-console-consumer.sh --bootstrap-server 192.168.200.254:9092 --topic topic_for_nifi --from-beginning

# 退出容器(退出不停止)
ctrl+p+q

5. kafka原理

在这里插入图片描述

  1. 易扩展:

    • 一个Broker中有多个Topic;
    • 一个Topic有多个Partition;
    • Producer写入Partition,可以指定一个Partition,可以设置key hash到Partition,可以轮询到Partition
  2. 高并发:

    多个Customer Group可以可以同时消费Partition的数据;

  3. 消息不丢失:

    • 0代表producer往集群发送数据不需要等到集群的返回,不确保消息发送成功。安全性最低但是效率最高。
    • 1代表producer往集群发送数据只要leader应答就可以发送下一条,只确保leader发送成功。
    • all代表producer往集群发送数据需要所有的follower都完成从leader的同步才会发送下一条,确保leader发送成功和所有的副本都完成备份。安全性最高,但是效率最低
  4. 数据持久化:

    Kafka初始会单独开辟一块磁盘空间,顺序写入数据(效率比随机写入高)

  5. 数据写入流程:

    • producer采用push模式将数据发布到broker,每条消息追加到分区中,顺序写入磁盘,所以保证同一分区内的数据是有序的;
    • Producer在写入数据的时候,永远的找leader;
    • 消息写入leader后,follower是主动的去leader进行同步的;
    • 消费者通过pull模式,从leader获取数据

7. 消息队列比较

特性ActiveMQRabbitMQRocketMQKafka
单机吞吐量万级万级十万级十万级,一般配合大数据系统进行实时数据计算、日志采集等场景
topic数量对吞吐量的影响topic可达到几千的级别,吞吐量会小幅度下降topic从几十到几百的时候,吞吐量会大幅度下降。(如果topic太多,建议增加服务器)
时效性ms级微秒级,延时最低ms级ms级以内
可用性非常高非常高,kafka是分布式,一个数据多个副本
消息可靠性较低概率丢数据可以做到0丢失可以做到0丢失可以做到0丢失
功能支持功能完备基于erlang开发,并发能力强,性能好功能完备,分布式,扩展性好功能简单,在大数据领域的实时计算及日志采集被大规模使用,是标准
总结技术成熟,功能强大,低概率丢消息,社区不活跃了开源,但使用的erlang语言,吞吐量也较低阿里内部用的比较多社区活跃度很高,适用于大数据架构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值