通过Docker在自己电脑上启动Kafka

栏目: 编程工具 · 发布时间: 5年前

内容简介:想Apache Kafka在你自己的电脑上运行,需要Docker,docker-compose,一些磁盘空间和互联网连接。我们将使用来自我们之所以选择docker-compose(而不是Confluent CLI工具),是因为大多数现代开发人员已经熟悉Docker,而且很多人每天都在使用docker-compose; 这将使您能够轻松地在现有项目中包含Kafka群集配置:我们的群集将包括:

想Apache Kafka在你自己的电脑上运行,需要Docker,docker-compose,一些磁盘空间和互联网连接。我们将使用来自 https://www.confluent.io/的 Kafka Docker镜像。

我们之所以选择docker-compose(而不是Confluent CLI工具),是因为大多数现代开发人员已经熟悉Docker,而且很多人每天都在使用docker-compose; 这将使您能够轻松地在现有项目中包含Kafka群集配置:

我们的群集将包括:

  • 一位卡夫卡经纪人,
  • 一个Zookeeper实例,
  • 一个模式schema注册表(因为我们稍后会使用Avro)

在真正的生产系统中,一个Kafka经纪人和一个Zookeeper是不够的,但它对开发来说很好。

使用Confluent Kafka docker镜像,我们无需手动编写配置文件。相反,一切都可以通过环境变量进行配置,我们将Kafka的环境与容器配置分开存储。

1. Zookeeper的环境 

让我们从Zookeeper开始吧。向Zookeeper提供的最重要的选项是此实例ID,客户端端口以及群集中所有服务器的列表。

原始 [url=https://gist.github.com/saabeilin/4708a2b1a16dbf3c52d53a721744a779#file-zookeeper-env]zookeeper.env[/url]

ZOOKEEPER_SERVERS=zookeeper-1:4182:5181
ZOOKEEPER_SERVER_ID=1
ZOOKEEPER_CLIENT_PORT=2181

KAFKA_HEAP_OPTS=-Xms32M -Xmx32M -verbose:gc

我们也配置了一些堆内存 - 这对于开发环境来说已经足够了。

Confluent的Zookeeper映像导出两个卷,data并log分别导出; 我们将不得不装载它们以保持持久性。因此,最小的Zookeeper服务描述将如下所示:

docker-compose.zookeeper.yaml

  zookeeper-1:
    image: confluentinc/cp-zookeeper:5.0.0
    hostname: zookeeper-1
    container_name: zookeeper-1
    ports:
      - <font>"2181:2181"</font><font>
    env_file:
      - zookeeper.env
    healthcheck:
      test: /bin/sh -c '[ \"imok\" = \"$$(echo ruok | nc -w 1 127.0.0.1 2181)\" ]' || exit 1
      interval: 1m
    volumes:
      - zookeeper-1-data:/<b>var</b>/lib/zookeeper/data/
      - zookeeper-1-log:/<b>var</b>/lib/zookeeper/log/
</font>

请注意,我们对主机、服务非常明确规定名称都是zookeeper-1,它们应与Zookeeper配置环境中的内容zookeeper-1相匹配。

2. Kafka

首先,我们需要指定kafka代理ID,将其指向先前配置的Zookeeper,并配置侦听器和发布商(代理在哪里监听以及在客户端连接时它通告的内容).

请注意,我们配置的代理应用,我可以通过kafka-1:9092从其他 docker 容器访问,也可以从你的主机通过localhost:29092访问。

Kafka可以在您第一次制作主题时自动创建主题; 这通常不是生产的最佳选择,但在开发中非常方便。在许多情况下,不希望删除主题,而在开发中它也没关系。因此,我们将启用主题自动创建和删除。

kafka.env

# This will be our first and only broker
KAFKA_BROKER_ID=1
# Define listeneres <b>for</b> accessing broker both inside Docker and from host machine
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT:<font><i>//kafka-1:9092,PLAINTEXT_HOST://localhost:29092</i></font><font>
# Zookeeper connection
KAFKA_ZOOKEEPER_CONNECT=zookeeper-1:2181

# In dev, we <b>do</b> not need Confluent metrics
CONFLUENT_SUPPORT_METRICS_ENABLE=false

# As well, we can add some heap pressure
KAFKA_HEAP_OPTS=-Xms256M -Xmx256M -verbose:gc

# In development enviroment, auto-creating topics (and deleting them) could be convenient
KAFKA_AUTO_CREATE_TOPICS_ENABLE=<b>true</b>
KAFKA_DELETE_TOPIC_ENABLE=<b>true</b>

# Eight partitions is more than enough <b>for</b> development
KAFKA_NUM_PARTITIONS=8

# Retain offsets <b>for</b> 31 days - in <b>case</b> you work on your project not that often
KAFKA_OFFSETS_RETENTION_MINUTES=44640

# Since we have just one broker, set replication factors to just one
KAFKA_DEFAULT_REPLICATION_FACTOR=1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1
KAFKA_MIN_INSYNC_REPLICAS=1

# In development environ, we <b>do</b> not need to many threads
KAFKA_NUM_RECOVERY_THREADS_PER_DATA_DIR=1
KAFKA_NUM_NETWORK_THREADS=3
KAFKA_NUM_IO_THREADS=3

# Configure <b>default</b> log cleanup. You can override these on per-topic basis
KAFKA_LOG_CLEANUP_POLICY=compact

KAFKA_LOG_RETENTION_BYTES=-1
KAFKA_LOG_RETENTION_CHECK_INTERVAL_MS=300000
KAFKA_LOG_RETENTION_HOURS=-1

KAFKA_LOG_ROLL_HOURS=24
KAFKA_LOG_SEGMENT_BYTES=1048576
KAFKA_LOG_SEGMENT_DELETE_DELAY_MS=60000
</font>

服务描述配置是为zookeeper-1Kafka日志添加依赖关系和卷(数据日志!)

kafka-1:
    image: confluentinc/cp-kafka:5.0.0
    hostname: kafka-1
    container_name: kafka-1
    stop_grace_period: 3m
    depends_on:
      - zookeeper-1
    ports:
      - <font>"29092:29092"</font><font>
    env_file:
      - kafka.env
    volumes:
      - kafka-1-data:/<b>var</b>/lib/kafka/data/
</font>

3.schema注册表

Schema注册表是最容易配置的。这是环境:

schema-registry.env

SCHEMA_REGISTRY_HOST_NAME=schema-registry SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL=zookeeper-1:2181
KAFKA_HEAP_OPTS=-Xms32M -Xmx32M -verbose:gc

服务:

docker-compose.schema-registry.yaml

  schema-registry:
    image: confluentinc/cp-schema-registry:5.0.0
    hostname: schema-registry
    container_name: schema-registry
    depends_on:
      - zookeeper-1
      - kafka-1
    ports:
      - <font>"8081:8081"</font><font>
    env_file:
      - schema-registry.env
</font>

4.一起运行

最后,拥有所有三个  .env文件和以下总的文件放在一个目录:

docker-compose.yaml

启动整个堆栈:

docker-compose up

启动堆栈可能需要一些时间,你会看到很多输出。当它终于结束时,我们可以尝试我们的新集群!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数字乌托邦

数字乌托邦

尼古拉斯•卡尔 / 姜忠伟 / 中信前沿出版社 / 2018-5 / 69.00

当下,技术与我们的关系变得越来越紧密不可分割,特别是智能手机等设备的出现,带给整个人类社会一场彻底的变革。的确,智能手机上的各种应用程序让我们的工作生活无比便利:社交媒体让我们能够和他人实时保持联络并传输信息,不再受时间、地点的限制;搜索引擎通过精准的算法将我们所需要的信息整合推送至屏幕上,让我们毫不费力就看到自己想要的;地图软件为我们的出行提供了更多路线选择,甚至可以使用语音导航,帮助我们顺利到......一起来看看 《数字乌托邦》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具