Kafka----基于docker部署快速部署

本文介绍如何搭建Kafka集群,包括虚拟机准备、Docker安装、Zookeeper集群搭建及Kafka集群部署过程。同时提供了一种利用docker-compose进行快速部署的方法。

一、kafka简介

详细介绍见: https://kafka.apache.org/0110/documentation.html

Apache Kafka® 是 一个分布式流处理平台. 这到底意味着什么呢?
我们知道流处理平台有以下三种特性:

  1. 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。
  2. 可以储存流式的记录,并且有较好的容错性。
  3. 可以在流式记录产生时就进行处理。

Kafka适合什么样的场景?

它可以用于两大类别的应用:

  1. 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)
  2. 构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topic和topic之间内部进行变化)

为了理解Kafka是如何做到以上所说的功能,从下面开始,我们将深入探索Kafka的特性。.

首先是一些概念:

  • Kafka作为一个集群,运行在一台或者多台服务器上.
  • Kafka 通过 topic 对存储的流数据进行分类。
  • 每条记录中包含一个key,一个value和一个timestamp(时间戳)。

Kafka有四个核心的API:

  • The Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。
  • The Consumer API 允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。
  • The Streams API 允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
  • The Connector API 允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。

在Kafka中,客户端和服务器使用一个简单、高性能、支持多语言的 TCP 协议.此协议版本化并且向下兼容老版本, 我们为Kafka提供了Java客户端,也支持许多其他语言的客户端。

在这里插入图片描述

二、kafka集群搭建

1、虚拟机准备

centos7镜像

node名 enp0s3 enp0s8 service
master 10.0.0.240 192.168.99.240 zk1,kafka1
worker1 10.0.0.240 192.168.99.240 zk2,kafka2
worker2 10.0.0.240 192.168.99.240 zk3,kafka3

2、docker安装

yum install -y wget
wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli

3、zookeeper集群搭建

docker启动命令如下

注意:为什么设置0.0.0.0,请参考https://stackoverflow.com/questions/30940981/zookeeper-error-cannot-open-channel-to-x-at-election-address

# zookeeper节点1
docker run -d --name zk1 -p 2181:2181 -p 2888:2888 -p 3888:3888 \
--add-host zk1:10.0.0.240 \
--add-host zk2:10.0.0.241 \
--add-host zk3:10.0.0.242 \
-e ZOO_MY_ID=1 \
-e ZOO_SERVERS="server.1=0.0.0.0:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888" \
zookeeper:3.4.10

# zookeeper节点2
docker run -d --name zk2 -p 2181:2181 -p 2888:2888 -p 3888:3888 \
--add-host zk1:10.0.0.240 \
--add-host zk2:10.0.0.241 \
--add-host zk3:10.0.0.242 \
-e ZOO_MY_ID=2 \
-e ZOO_SERVERS="server.1=zk1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zk3:2888:3888" \
zookeeper:3.4.10

# # zookeeper节点3
docker run -d --name zk3 -p 2181:2181 -p 2888:2888 -p 3888:3888 \
--add-host zk1:10.0.0.240 \
--add-host zk2:10.0.0.241 \
--add-host zk3:10.0.0.242 \
-e ZOO_MY_ID=3 \
-e ZOO_SERVERS="server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=0.0.0.0:2888:3888" \
zookeeper:3.4.10

查看节点状态:

[root@master ~]# docker exec -it zk1 bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower

[root@worker1 ~]# docker exec -it zk2 bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader

[root@worker2 ~]# docker exec -it zk3 bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower

4、kafka集群搭建

4.1、docker启动命令

由于位于不同主机,启动容器需要添加DNS解析,修改/etc/hosts文件,使用--add-host参数,如果不用DNS解析可以使用--net host使用宿主机网络,启动命令如下:

# kafka节点1
docker run -d --name kafka1 -p 9092:9092 \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_ADVERTISED_HOST_NAME=broker1 \
-e KAFKA_ADVERTISED_PORT=9092 \
-e KAFKA_HOST_NAME=broker1 \
-e KAFKA_ZOOKEEPER_CONNECT=zk1:2181,zk2:2181,zk3:2181 \
-e KAFKA_LISTENERS="PLAINTEXT://0.0.0.0:9092" \
-e KAFKA_ADVERTISED_LISTENERS="PLAINTEXT://broker1:9092" \
-e KAFKA_DELETE_TOPIC_ENABLE=true \
--add-host broker1:10.0.0.240 \
--add-host broker2:10.0.0.241 \
--add-host broker3:10.0.0.242 \
--add-host zk1:10.0.0.240 \
--add-host zk2:10.0.0.241 \
--add-host zk3:10.0.0.242 \
-v /var/run/docker.sock:/var/run/docker.sock \
wurstmeister/kafka:2.11-0.11.0.3

# kafka节点2
docker run -d --name kafka2 -p 9092:9092 \
-e KAFKA_BROKER_ID=2 \
-e KAFKA_ADVERTISED_HOST_NAME=broker2 \
-e KAFKA_ADVERTISED_PORT=9092 \
-e KAFKA_HOST_NAME=broker2 \
-e KAFKA_ZOOKEEPER_CONNECT=zk1:2181,zk2:2181,zk3:2181 \
-e KAFKA_LISTENERS="PLAINTEXT://0.0.0.0:9092" \
-e KAFKA_ADVERTISED_LISTENERS="PLAINTEXT://broker2:9092" \
-e KAFKA_DELETE_TOPIC_ENABLE=true \
--add-host broker1:10.0.0.240 \
--add-host broker2:10.0.0.241 \
--add-host broke
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值