Debezium 项目致力于提供易于部署的连接器,因此用户可以通过获取正确的连接器存档并将其解压到 Kafka Connect 的插件路径中,来尝试运行他们选择的连接器。

这适用于所有连接器,但 Debezium PostgreSQL 连接器除外。该连接器具有独特性,因为它需要在 PostgreSQL 源数据库本身内部安装逻辑解码插件。目前,有两个支持的逻辑插件。

  • postgres-decoderbufs,它使用 Protocol Buffers 作为非常紧凑的传输格式,并由 Debezium 社区维护。

  • 基于 JSON 的插件,它基于 JSON 并由其自己的上游社区维护。

这些插件可以有两种方式被消费和部署;最简单的方式是使用我们预先制作的 Postgres 容器镜像,其中包含了插件并已按照要求配置好。如果您在数据中心使用容器,或者从头开始启动一个新数据库,那么这可能是一个很好的选择。

另一种方法是从源代码构建。尽管这通常是一项简单的任务,但它仍然为快速入门带来了一些障碍,并且需要对 Linux 操作系统有非同寻常的了解。

为了弥合这两种极端情况之间的差距,我们创建并发布了一个 RPM 包,适用于 Fedora 30 及更高版本。通过安装此包,您将获得必要的二进制文件,剩下的唯一任务是配置 PostgreSQL 以启用该插件。该 RPM 基于最新的稳定 Debezium 版本,目前是 0.9.5.Final

示例

下面我们来展示一下该软件包是如何工作的。我们将使用 Vagrant 工具,它可以轻松启动一个预先配置好的带有 Fedora 的虚拟机。当然,这不是必需的,相同的步骤也适用于任何其他运行 Fedora 的方式。

创建并启动带有 Fedora 30 的虚拟机

$ vagrant init fedora/30-cloud-base

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

$ vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
.
.
.
==> default: Machine booted and ready!

登录到虚拟机

$ vagrant ssh

安装 PostgreSQL 服务器和 Protocol Buffers 逻辑解码插件

$ sudo dnf -y install postgresql postgres-decoderbufs
.
.
.
Installed:
  postgres-decoderbufs-0.9.5-1.fc30.x86_64              postgresql-11.3-1.fc30.x86_64
  postgis-2.5.1-1.fc30.x86_64                           armadillo-9.400.4-1.fc30.x86_64
  blas-3.8.0-12.fc30.x86_64                             cairo-1.16.0-5.fc30.x86_64
  cups-libs-1:2.2.11-2.fc30.x86_64                      fontconfig-2.13.1-8.fc30.x86_64
  lapack-3.8.0-12.fc30.x86_64                           libgfortran-9.1.1-1.fc30.x86_64
  libpq-11.3-2.fc30.x86_64                              libquadmath-9.1.1-1.fc30.x86_64
  mariadb-connector-c-3.0.10-1.fc30.x86_64              mariadb-connector-c-config-3.0.10-1.fc30.noarch
  nss-3.44.0-2.fc30.x86_64                              nss-softokn-3.44.0-2.fc30.x86_64
  nss-softokn-freebl-3.44.0-2.fc30.x86_64               nss-sysinit-3.44.0-2.fc30.x86_64
  nss-util-3.44.0-2.fc30.x86_64                         poppler-0.73.0-9.fc30.x86_64
  postgresql-server-11.3-1.fc30.x86_64                  proj-5.2.0-2.fc30.x86_64
  proj-datumgrid-1.8-2.fc30.noarch                      uriparser-0.9.3-1.fc30.x86_64
  SuperLU-5.2.1-6.fc30.x86_64                           arpack-3.5.0-6.fc28.x86_64
  atk-2.32.0-1.fc30.x86_64                              avahi-libs-0.7-18.fc30.x86_64
  cfitsio-3.450-3.fc30.x86_64                           dejavu-fonts-common-2.37-1.fc30.noarch
  dejavu-sans-fonts-2.37-1.fc30.noarch                  fontpackages-filesystem-1.44-24.fc30.noarch
  freexl-1.0.5-3.fc30.x86_64                            fribidi-1.0.5-2.fc30.x86_64
  gdal-libs-2.3.2-7.fc30.x86_64                         gdk-pixbuf2-2.38.1-1.fc30.x86_64
  gdk-pixbuf2-modules-2.38.1-1.fc30.x86_64              geos-3.7.1-1.fc30.x86_64
  giflib-5.1.9-1.fc30.x86_64                            graphite2-1.3.10-7.fc30.x86_64
  gtk-update-icon-cache-3.24.8-1.fc30.x86_64            gtk2-2.24.32-4.fc30.x86_64
  harfbuzz-2.3.1-1.fc30.x86_64                          hdf5-1.8.20-6.fc30.x86_64
  hicolor-icon-theme-0.17-5.fc30.noarch                 jasper-libs-2.0.14-8.fc30.x86_64
  jbigkit-libs-2.1-16.fc30.x86_64                       lcms2-2.9-5.fc30.x86_64
  libXcomposite-0.4.4-16.fc30.x86_64                    libXcursor-1.1.15-5.fc30.x86_64
  libXdamage-1.1.4-16.fc30.x86_64                       libXfixes-5.0.3-9.fc30.x86_64
  libXft-2.3.2-12.fc30.x86_64                           libXi-1.7.9-9.fc30.x86_64
  libXinerama-1.1.4-3.fc30.x86_64                       libaec-1.0.4-1.fc30.x86_64
  libdap-3.20.3-1.fc30.x86_64                           libgeotiff-1.4.3-3.fc30.x86_64
  libgta-1.0.9-2.fc30.x86_64                            libjpeg-turbo-2.0.2-1.fc30.x86_64
  libkml-1.3.0-19.fc30.x86_64                           libspatialite-4.3.0a-11.fc30.x86_64
  libtiff-4.0.10-4.fc30.x86_64                          libwebp-1.0.2-2.fc30.x86_64
  netcdf-4.4.1.1-12.fc30.x86_64                         nspr-4.21.0-1.fc30.x86_64
  ogdi-3.2.1-4.fc30.x86_64                              openblas-0.3.5-5.fc30.x86_64
  openblas-openmp-0.3.5-5.fc30.x86_64                   openblas-serial-0.3.5-5.fc30.x86_64
  openblas-threads-0.3.5-5.fc30.x86_64                  openblas-threads64_-0.3.5-5.fc30.x86_64
  openjpeg2-2.3.1-1.fc30.x86_64                         pango-1.43.0-3.fc30.x86_64
  pixman-0.38.0-1.fc30.x86_64                           poppler-data-0.4.9-3.fc30.noarch
  protobuf-c-1.3.1-2.fc30.x86_64                        unixODBC-2.3.7-4.fc30.x86_64
  xerces-c-3.2.2-2.fc30.x86_64

Complete!

接下来,初始化数据库

$ sudo /usr/bin/postgresql-setup --initdb

现在,通过添加以下参数,在数据库服务器配置文件 /var/lib/pgsql/data/postgresql.conf 中启用该插件

# MODULES
shared_preload_libraries = 'decoderbufs'

# REPLICATION
wal_level = logical             # minimal, archive, hot_standby, or logical (change requires restart)
max_wal_senders = 8             # max number of walsender processes (change requires restart)
wal_keep_segments = 4           # in logfile segments, 16MB each; 0 disables
#wal_sender_timeout = 60s       # in milliseconds; 0 disables
max_replication_slots = 4       # max number of replication slots (change requires restart)

配置安全文件 /var/lib/pgsql/data/pg_hba.conf,以便 Debezium 将使用的数据库用户(例如 debezium)添加以下参数

local   replication     debezium                          trust
host    replication     debezium  127.0.0.1/32            trust
host    replication     debezium  ::1/128                 trust

最后,重启 PostgreSQL

$ sudo systemctl restart postgresql

就是这样:现在我们拥有了一个 PostgreSQL 数据库,可以向 Debezium PostgreSQL 连接器流式传输更改了。当然,该插件也可以安装到已有的数据库(Postgres 9 及更高版本)中,只需安装 RPM 包并按照描述的方式设置配置文件和安全文件即可。

展望:pgoutput

虽然 decoderbufs 插件是我们推荐的逻辑解码插件,但在某些情况下您可能无法使用它。特别是,您通常无法灵活地在云环境(如 Amazon RDS)中安装自定义插件。

这就是为什么我们目前正在探索 第三种替代方案来替代 decoderbufs 和 wal2sjon,即利用 Postgres 的逻辑复制机制。基于此,有一个内置插件 pgoutput,自 Postgres 10 版本以来就存在于每个 Postgres 数据库中。我们仍在探索使用 pgoutput 的影响(和可能的限制),但到目前为止,情况看起来很有希望,它最终可能成为我们工具箱中有价值的工具。

敬请关注更多即将发布的详细信息!

Jiri Pechanec

Jiri 是 Red Hat 的一名软件开发人员(也是前质量工程师)。他的职业生涯大部分时间都投入在 Java 和系统集成项目和任务中。他居住在捷克共和国布尔诺附近。

   


关于 Debezium

Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。

参与进来

我们希望您觉得 Debezium 有趣且有用,并希望尝试一下。在 Twitter @debezium 上关注我们,在 Zulip 上与我们聊天,或加入我们的 邮件列表 与社区交流。所有代码都在 GitHub 上开源,因此请在本地构建代码,帮助我们改进现有连接器并添加更多连接器。如果您发现问题或有改进 Debezium 的想法,请告诉我们或 记录一个问题

版权所有 © Debezium 及其作者。保留所有权利。有关我们的商标详情,请访问我们的 商标政策商标列表。第三方商标属于其各自所有者,在此提及并不表示任何认可或关联。
×