欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Debezium文档翻译02:启动Docker,Debezium,Zookeeper,Kafka

程序员文章站 2024-03-11 17:02:55
...

使用Docker运行Debezium

运行Debezium涉及三个主要服务:Zookeeper、Kafka和Debezium的连接器服务。
本教程将指导您使用Docker和Debezium的Docker映像启动这些服务的单个实例。
另一方面,生产环境需要运行每个服务的多个实例,以保证性能、可靠性、复制和容错。
这可以通过OpenShift和Kubernetes这样的平台来实现,该平台可以管理运行在多个主机和机器上的多个Docker容器,但通常需要在专用硬件上安装。

启动Docker

确保Docker安装并运行在Linux、OS X或Windows上。
我们强烈推荐在这些平台上使用Docker的最新版本,我们在编写这些说明时也考虑到了这一点。
(通过Docker machine在虚拟机中运行Docker不再是首选方法,Docker建议您升级。)

为了进行简单的评估和实验,本教程将指导您在本地机器上的单独容器中启动每个服务的单个实例。
Zookeeper和Kafka都在容器内部本地存储数据,正常使用需要将主机上的目录作为卷挂载,这样容器停止时,持久化数据就会保留下来。
在本教程中我们将跳过这一点,尽管Docker镜像的文档描述了如何做到这一点。
这意味着当一个容器被移除时,所有的持久化数据都会丢失。
这对于我们的实验来说是很理想的,因为当我们完成的时候,你的电脑上什么都没有留下,你可以多次运行这个实验,而不需要清理中间的任何东西。

在本地运行多个服务可能会造成混淆,因此我们将使用一个单独的终端来运行前台中的每个容器。
这样,容器的所有输出都将显示在用于运行它的终端中。

提示:

这不是运行Docker容器的唯一方法。
与在前台(使用-it)运行容器不同,Docker允许您以分离模式(使用-d)运行容器,容器在其中启动,Docker命令立即返回。
分离模式容器不会在终端中显示它们的输出,尽管您总是可以通过使用docker日志命令

docker logs --follow --name <container-name>

来看到输出内容。这是我们为运行的每个容器命名的原因之一。
有关更多细节,请参阅Docker文档。

启动Zookeeper

在构成Debezium的所有不同服务/进程中,首先启动的是Zookeepe。
通过以下命令来启动一个新的终端和一个带有Zookeeper的容器:

$ docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 debezium/zookeeper:0.8

这将使用debezium/zookeeper映像的0.8版本运行一个新的容器,并将zookeeper名称分配给这个容器。
"-it"命令使容器具有交互性,这意味着它将终端的标准输入和输出附加到容器上,以便您可以看到容器中发生了什么。
“–rm"命令可以使Docker在容器停止时移除容器。
这三个”-p"选项将容器的三个端口(例如,2181、2888和3888)映射到Docker主机上的相同端口,以便其他容器(以及容器外的软件)可以与Zookeeper通信。

你应该可以在你的终端看到zookeeper的典型输出:

Starting up in standalone mode
ZooKeeper JMX enabled by default
Using config: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,417 - INFO  [main:[email protected]] - Reading configuration from: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,419 - INFO  [main:[email protected]] - autopurge.snapRetainCount set to 3
2017-09-21 07:15:55,419 - INFO  [main:[email protected]] - autopurge.purgeInterval set to 1
2017-09-21 07:15:55,420 - WARN  [main:[email protected]] - Either no config or no quorum defined in config, running  in standalone mode
2017-09-21 07:15:55,420 - INFO  [PurgeTask:[email protected]] - Purge task started.
2017-09-21 07:15:55,425 - INFO  [PurgeTask:[email protected]] - Purge task completed.
2017-09-21 07:15:55,427 - INFO  [main:[email protected]] - Reading configuration from: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,427 - INFO  [main:[email protected]] - Starting server
2017-09-21 07:15:55,432 - INFO  [main:[email protected]] - Server environment:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
2017-09-21 07:15:55,432 - INFO  [main:[email protected]] - Server environment:host.name=51b46dd211d0
2017-09-21 07:15:55,432 - INFO  [main:[email protected]] - Server environment:java.version=1.8.0_131
2017-09-21 07:15:55,432 - INFO  [main:[email protected]] - Server environment:java.vendor=Oracle Corporation
2017-09-21 07:15:55,432 - INFO  [main:[email protected]] - Server environment:java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64/jre
2017-09-21 07:15:55,432 - INFO  [main:[email protected]] - Server environment:java.class.path=/zookeeper/bin/../build/classes:/zookeeper/bin/../build/lib/*.jar:/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/zookeeper/bin/../lib/netty-3.10.5.Final.jar:/zookeeper/bin/../lib/log4j-1.2.16.jar:/zookeeper/bin/../lib/jline-0.9.94.jar:/zookeeper/bin/../zookeeper-3.4.10.jar:/zookeeper/bin/../src/java/lib/*.jar:/zookeeper/conf:
2017-09-21 07:15:55,432 - INFO  [main:[email protected]] - Server environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2017-09-21 07:15:55,432 - INFO  [main:[email protected]] - Server environment:java.io.tmpdir=/tmp
2017-09-21 07:15:55,433 - INFO  [main:[email protected]] - Server environment:java.compiler=<NA>
2017-09-21 07:15:55,433 - INFO  [main:[email protected]] - Server environment:os.name=Linux
2017-09-21 07:15:55,433 - INFO  [main:[email protected]] - Server environment:os.arch=amd64
2017-09-21 07:15:55,433 - INFO  [main:[email protected]] - Server environment:os.version=4.4.0-93-generic
2017-09-21 07:15:55,433 - INFO  [main:[email protected]] - Server environment:user.name=zookeeper
2017-09-21 07:15:55,433 - INFO  [main:[email protected]] - Server environment:user.home=/zookeeper
2017-09-21 07:15:55,433 - INFO  [main:[email protected]] - Server environment:user.dir=/zookeeper
2017-09-21 07:15:55,435 - INFO  [main:[email protected]] - tickTime set to 2000
2017-09-21 07:15:55,435 - INFO  [main:[email protected]] - minSessionTimeout set to -1
2017-09-21 07:15:55,435 - INFO  [main:[email protected]] - maxSessionTimeout set to -1
2017-09-21 07:15:55,440 - INFO  [main:[email protected]] - binding to port 0.0.0.0/0.0.0.0:2181

最后一行很重要,报告Zookeeper已经准备好,并监听端口2181。终端将继续显示Zookeeper生成的其他输出。

启动Kafka

打开一个新的终端,在一个新的容器中运行Kafka:

$ docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka:0.8

提示

在本教程中,我们总是在Docker容器中连接Kafka,只要我们连接到Kafka容器,就总是能够看到Kafka容器并与之通信。如果我们想从Docker容器外部连接到Kafka,那么我们就会希望Kafka通过Docker的主机地址告知外界,我们可以通过添加

-e ADVERTISED_HOST_NAME=

紧随其后的是在Linux或Mac上运行的Docker的主机的IP地址或主机名解析,这是主机的IP地址(不是localhost)。

我们使用debezium/kafka镜像的0.8版本运行一个新的容器,并将kafka名称分配给这个容器。"-it"选项使容器具有交互性,这意味着它将终端的标准输入和输出附加到容器上,以便您可以看到容器中发生了什么,"–rm"命令可以使Docker在容器停止时移除容器。该命令将容器中的端口9092映射到Docker主机上的相同端口,以便容器外部的软件可以与Kafka通信。最后,使用"–link zookeeper:zookeeper"参数告诉容器,它可以在名为zookeeper的容器中找到在同一个Docker主机上运行的zookeeper。

你应该可以在你的终端看到Kafka的典型输出,内容结尾为:

...
2017-09-21 07:16:59,085 - INFO  [main-EventThread:[email protected]] - zookeeper state changed (SyncConnected)
2017-09-21 07:16:59,218 - INFO  [main:[email protected]] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
2017-09-21 07:16:59,221 - WARN  [main:[email protected]] - No meta.properties file under dir /kafka/data/1/meta.properties
2017-09-21 07:16:59,247 - INFO  [ThrottledRequestReaper-Fetch:[email protected]] - [ThrottledRequestReaper-Fetch]: Starting
2017-09-21 07:16:59,247 - INFO  [ThrottledRequestReaper-Produce:[email protected]] - [ThrottledRequestReaper-Produce]: Starting
2017-09-21 07:16:59,248 - INFO  [ThrottledRequestReaper-Request:[email protected]] - [ThrottledRequestReaper-Request]: Starting
2017-09-21 07:16:59,308 - INFO  [main:[email protected]] - Loading logs.
2017-09-21 07:16:59,312 - INFO  [main:[email protected]] - Logs loading complete in 4 ms.
2017-09-21 07:16:59,349 - INFO  [main:[email protected]] - Starting log cleanup with a period of 300000 ms.
2017-09-21 07:16:59,353 - INFO  [main:[email protected]] - Starting log flusher with a default period of 9223372036854775807 ms.
2017-09-21 07:16:59,385 - INFO  [main:[email protected]] - Awaiting socket connections on 172.17.0.4:9092.
2017-09-21 07:16:59,387 - INFO  [main:[email protected]] - [Socket Server on Broker 1], Started 1 acceptor threads
2017-09-21 07:16:59,394 - INFO  [ExpirationReaper-1-Produce:[email protected]] - [ExpirationReaper-1-Produce]: Starting
2017-09-21 07:16:59,395 - INFO  [ExpirationReaper-1-Fetch:[email protected]] - [ExpirationReaper-1-Fetch]: Starting
2017-09-21 07:16:59,395 - INFO  [ExpirationReaper-1-DeleteRecords:[email protected]] - [ExpirationReaper-1-DeleteRecords]: Starting
2017-09-21 07:16:59,435 - INFO  [ExpirationReaper-1-topic:[email protected]] - [ExpirationReaper-1-topic]: Starting
2017-09-21 07:16:59,441 - INFO  [ExpirationReaper-1-Heartbeat:[email protected]] - [ExpirationReaper-1-Heartbeat]: Starting
2017-09-21 07:16:59,442 - INFO  [controller-event-thread:[email protected]] - Creating /controller (is it secure? false)
2017-09-21 07:16:59,447 - INFO  [ExpirationReaper-1-Rebalance:[email protected]] - [ExpirationReaper-1-Rebalance]: Starting
2017-09-21 07:16:59,456 - INFO  [controller-event-thread:[email protected]] - Result of znode creation is: OK
2017-09-21 07:16:59,458 - INFO  [main:[email protected]] - [GroupCoordinator 1]: Starting up.
2017-09-21 07:16:59,459 - INFO  [main:[email protected]] - [GroupCoordinator 1]: Startup complete.
2017-09-21 07:16:59,460 - INFO  [group-metadata-manager-0:[email protected]] - [Group Metadata Manager on Broker 1]: Removed 0 expired offsets in 1 milliseconds.
2017-09-21 07:16:59,487 - INFO  [main:[email protected]] - [ProducerId Manager 1]: Acquired new producerId block (brokerId:1,blockStartProducerId:0,blockEndProducerId:999) by writing to Zk with path version 1
2017-09-21 07:16:59,530 - INFO  [main:[email protected]] - [Transaction Coordinator 1]: Starting up.
2017-09-21 07:16:59,532 - INFO  [TxnMarkerSenderThread-1:[email protected]] - [Transaction Marker Channel Manager 1]: Starting
2017-09-21 07:16:59,532 - INFO  [main:[email protected]] - [Transaction Coordinator 1]: Startup complete.
2017-09-21 07:16:59,551 - INFO  [main:[email protected]] - Will not load MX4J, mx4j-tools.jar is not in the classpath
2017-09-21 07:16:59,590 - INFO  [main:[email protected]] - Creating /brokers/ids/1 (is it secure? false)
2017-09-21 07:16:59,604 - INFO  [main:[email protected]] - Result of znode creation is: OK
2017-09-21 07:16:59,605 - INFO  [main:[email protected]] - Registered broker 1 at path /brokers/ids/1 with addresses: EndPoint(172.17.0.4,9092,ListenerName(PLAINTEXT),PLAINTEXT)
2017-09-21 07:16:59,606 - WARN  [main:[email protected]] - No meta.properties file under dir /kafka/data/1/meta.properties
2017-09-21 07:16:59,648 - INFO  [main:[email protected]] - Kafka version : 0.11.0.0
2017-09-21 07:16:59,648 - INFO  [main:[email protected]] - Kafka commitId : cb8625948210849f
2017-09-21 07:16:59,649 - INFO  [main:[email protected]] - [Kafka Server 1], started

上面显示的最后一行显示Kafka broker已经成功启动,并为客户机连接做好了准备。终端将继续显示Kafka生成的额外输出。

提示

Debezium 0.8.3.Final需要Kafka Connect 1.1.0,在本教程中,我们还使用Kafka broker的1.1.0版本。查看Kafka文档,了解不同版本的Kafka Connect和Kafka broker之间的兼容性。

源文地址:https://debezium.io/docs/tutorial/

相关标签: Debezium