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 的影响(和可能的限制),但到目前为止,情况看起来很有希望,它最终可能成为我们工具箱中有价值的工具。
敬请关注更多即将发布的详细信息!
关于 Debezium
Debezium 是一个开源的分布式平台,可以将现有数据库转变为事件流,使应用程序能够几乎即时地看到并响应数据库中已提交的每个行级更改。Debezium 构建在 Kafka 之上,并提供了 Kafka Connect 兼容的连接器,用于监控特定的数据库管理系统。Debezium 将数据更改的历史记录在 Kafka 日志中,这样您的应用程序可以随时停止和重新启动,并可以轻松地消费在未运行时错过的所有事件,确保所有事件都被正确且完整地处理。Debezium 在 Apache 许可证 2.0 下是 开源 的。