前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Debezium教程翻译02:启动Docker,Debezium,Zookeeper,Kafka

Debezium教程翻译02:启动Docker,Debezium,Zookeeper,Kafka

作者头像
IT云清
发布2019-01-22 15:39:08
1.3K0
发布2019-01-22 15:39:08
举报
文章被收录于专栏:IT云清IT云清

使用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:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,419 - INFO  [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
2017-09-21 07:15:55,419 - INFO  [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 1
2017-09-21 07:15:55,420 - WARN  [main:QuorumPeerMain@113] - Either no config or no quorum defined in config, running  in standalone mode
2017-09-21 07:15:55,420 - INFO  [PurgeTask:DatadirCleanupManager$PurgeTask@138] - Purge task started.
2017-09-21 07:15:55,425 - INFO  [PurgeTask:DatadirCleanupManager$PurgeTask@144] - Purge task completed.
2017-09-21 07:15:55,427 - INFO  [main:QuorumPeerConfig@134] - Reading configuration from: /zookeeper/conf/zoo.cfg
2017-09-21 07:15:55,427 - INFO  [main:ZooKeeperServerMain@96] - Starting server
2017-09-21 07:15:55,432 - INFO  [main:Environment@100] - 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:Environment@100] - Server environment:host.name=51b46dd211d0
2017-09-21 07:15:55,432 - INFO  [main:Environment@100] - Server environment:java.version=1.8.0_131
2017-09-21 07:15:55,432 - INFO  [main:Environment@100] - Server environment:java.vendor=Oracle Corporation
2017-09-21 07:15:55,432 - INFO  [main:Environment@100] - 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:Environment@100] - 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:Environment@100] - 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:Environment@100] - Server environment:java.io.tmpdir=/tmp
2017-09-21 07:15:55,433 - INFO  [main:Environment@100] - Server environment:java.compiler=<NA>
2017-09-21 07:15:55,433 - INFO  [main:Environment@100] - Server environment:os.name=Linux
2017-09-21 07:15:55,433 - INFO  [main:Environment@100] - Server environment:os.arch=amd64
2017-09-21 07:15:55,433 - INFO  [main:Environment@100] - Server environment:os.version=4.4.0-93-generic
2017-09-21 07:15:55,433 - INFO  [main:Environment@100] - Server environment:user.name=zookeeper
2017-09-21 07:15:55,433 - INFO  [main:Environment@100] - Server environment:user.home=/zookeeper
2017-09-21 07:15:55,433 - INFO  [main:Environment@100] - Server environment:user.dir=/zookeeper
2017-09-21 07:15:55,435 - INFO  [main:ZooKeeperServer@829] - tickTime set to 2000
2017-09-21 07:15:55,435 - INFO  [main:ZooKeeperServer@838] - minSessionTimeout set to -1
2017-09-21 07:15:55,435 - INFO  [main:ZooKeeperServer@847] - maxSessionTimeout set to -1
2017-09-21 07:15:55,440 - INFO  [main:NIOServerCnxnFactory@89] - 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:ZkClient@713] - zookeeper state changed (SyncConnected)
2017-09-21 07:16:59,218 - INFO  [main:Logging$class@70] - Cluster ID = LPtcBFxzRvOzDSXhc6AamA
2017-09-21 07:16:59,221 - WARN  [main:Logging$class@85] - No meta.properties file under dir /kafka/data/1/meta.properties
2017-09-21 07:16:59,247 - INFO  [ThrottledRequestReaper-Fetch:Logging$class@70] - [ThrottledRequestReaper-Fetch]: Starting
2017-09-21 07:16:59,247 - INFO  [ThrottledRequestReaper-Produce:Logging$class@70] - [ThrottledRequestReaper-Produce]: Starting
2017-09-21 07:16:59,248 - INFO  [ThrottledRequestReaper-Request:Logging$class@70] - [ThrottledRequestReaper-Request]: Starting
2017-09-21 07:16:59,308 - INFO  [main:Logging$class@70] - Loading logs.
2017-09-21 07:16:59,312 - INFO  [main:Logging$class@70] - Logs loading complete in 4 ms.
2017-09-21 07:16:59,349 - INFO  [main:Logging$class@70] - Starting log cleanup with a period of 300000 ms.
2017-09-21 07:16:59,353 - INFO  [main:Logging$class@70] - Starting log flusher with a default period of 9223372036854775807 ms.
2017-09-21 07:16:59,385 - INFO  [main:Logging$class@70] - Awaiting socket connections on 172.17.0.4:9092.
2017-09-21 07:16:59,387 - INFO  [main:Logging$class@70] - [Socket Server on Broker 1], Started 1 acceptor threads
2017-09-21 07:16:59,394 - INFO  [ExpirationReaper-1-Produce:Logging$class@70] - [ExpirationReaper-1-Produce]: Starting
2017-09-21 07:16:59,395 - INFO  [ExpirationReaper-1-Fetch:Logging$class@70] - [ExpirationReaper-1-Fetch]: Starting
2017-09-21 07:16:59,395 - INFO  [ExpirationReaper-1-DeleteRecords:Logging$class@70] - [ExpirationReaper-1-DeleteRecords]: Starting
2017-09-21 07:16:59,435 - INFO  [ExpirationReaper-1-topic:Logging$class@70] - [ExpirationReaper-1-topic]: Starting
2017-09-21 07:16:59,441 - INFO  [ExpirationReaper-1-Heartbeat:Logging$class@70] - [ExpirationReaper-1-Heartbeat]: Starting
2017-09-21 07:16:59,442 - INFO  [controller-event-thread:Logging$class@70] - Creating /controller (is it secure? false)
2017-09-21 07:16:59,447 - INFO  [ExpirationReaper-1-Rebalance:Logging$class@70] - [ExpirationReaper-1-Rebalance]: Starting
2017-09-21 07:16:59,456 - INFO  [controller-event-thread:Logging$class@70] - Result of znode creation is: OK
2017-09-21 07:16:59,458 - INFO  [main:Logging$class@70] - [GroupCoordinator 1]: Starting up.
2017-09-21 07:16:59,459 - INFO  [main:Logging$class@70] - [GroupCoordinator 1]: Startup complete.
2017-09-21 07:16:59,460 - INFO  [group-metadata-manager-0:Logging$class@70] - [Group Metadata Manager on Broker 1]: Removed 0 expired offsets in 1 milliseconds.
2017-09-21 07:16:59,487 - INFO  [main:Logging$class@70] - [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:Logging$class@70] - [Transaction Coordinator 1]: Starting up.
2017-09-21 07:16:59,532 - INFO  [TxnMarkerSenderThread-1:Logging$class@70] - [Transaction Marker Channel Manager 1]: Starting
2017-09-21 07:16:59,532 - INFO  [main:Logging$class@70] - [Transaction Coordinator 1]: Startup complete.
2017-09-21 07:16:59,551 - INFO  [main:Logging$class@70] - Will not load MX4J, mx4j-tools.jar is not in the classpath
2017-09-21 07:16:59,590 - INFO  [main:Logging$class@70] - Creating /brokers/ids/1 (is it secure? false)
2017-09-21 07:16:59,604 - INFO  [main:Logging$class@70] - Result of znode creation is: OK
2017-09-21 07:16:59,605 - INFO  [main:Logging$class@70] - 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:Logging$class@85] - No meta.properties file under dir /kafka/data/1/meta.properties
2017-09-21 07:16:59,648 - INFO  [main:AppInfoParser$AppInfo@83] - Kafka version : 0.11.0.0
2017-09-21 07:16:59,648 - INFO  [main:AppInfoParser$AppInfo@84] - Kafka commitId : cb8625948210849f
2017-09-21 07:16:59,649 - INFO  [main:Logging$class@70] - [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/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用Docker运行Debezium
  • 启动Docker
    • 提示:
    • 启动Zookeeper
    • 启动Kafka
      • 提示
        • 提示
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档