应用debezium将postgresql数据送至kafka(官网示例 本地docker部署)

【PostgreSQL逻辑复制数据同步到kafka】 目前CDC(Change Data Capture)工具还是比较多的 ,现在有部分增量数据同步工具是基于触发器实现的,把数据库的变化记录到某个系统表中,然后在客户端建立缓冲,并定期将变化push到接收端,接收端和发送端建立通道,并定期pull新的数据变化,在目标数据库回放 。但因为使用了触发器会影响生产环境的性能,这点可能无法接受 ,其他的增量数据同步工具中占比比较大的一类,是基于kafka来实现的。例如RedHat开源的 Debezium。通过抽取数据库日志来获取变更,实现增量数据同步。下面是一个Post 阅读详情

版本

conncet 2.2
postgresql 15.2

1 postgresql

1.1 获取

docker pull debezium/example-postgres

1.2 运行

docker run -d --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres debezium/example-postgres

1.3 特殊配置

观察镜像中/var/lib/postgresql/data下postgresql.conf,最关键的配置为:

shared_preload_libraries = 'decoderbufs'
wal_level = logical

示例中使用解码器为decoderbufs,对应创建connect时plugin.name默认值即为decoderbufs。postgresql 10版本后自带pgoutput,创建connect时可以将plugin.name设置为pgoutput。

2 zookeeper

2.1 获取

docker pull debezium/zookeeper

2.2 运行

docker run -it -d --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 debezium/zookeeper:latest

3 kafka

3.1 获取

docker pull debezium/kafka

3.2 运行

docker run -it -d --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka:latest

3.3 检查

如果本地已有kafka客户端,可以使用如下命令查看已有topic:

bin/kafka-topics.sh --bootstrap-server 172.17.0.1:9092 --list

connect

4.1 获取

docker pull debezium/connect

4.2 启动

docker run -d --name connect -p 8083:8083 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my_connect_configs -e OFFSET_STORAGE_TOPIC=my_connect_offsets -e STATUS_STORAGE_TOPIC=my_connect_statuses --link zookeeper:zookeeper --link kafka:kafka --link postgres:postgres debezium/connect

4.3 创建connect

创建pgsql-inventory-connector.json文件,通过database的hostname、port确定postgresql。此处使用postgresql账号,因为这个账号具有replication权限。

{
  "name": "localhost-connector",
  "config": {
    "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
    "database.hostname": "172.17.0.1",
    "database.port": "5432",
    "database.user": "postgres",
    "database.password": "postgres",
    "database.dbname" : "postgres",
    "topic.prefix": "dbserver1",
    "table.include.list": "inventory.customers"
  }
}

通过http创建connect

curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" 172.17.0.1:8083/connectors/ -d @pgsql-inventory-connector.json

4.4 测试命令

curl -H "Accept:application/json" 172.17.0.1:8083
curl -H "Accept:application/json" 172.17.0.1:8083/connectors
curl -i -X GET -H "Accept:application/json" 172.17.0.1:8083/connectors/localhost-connector

5 测试

5.1 kafka

创建消费者

bin/kafka-console-consumer.sh --topic dbserver1.inventory.customers --from-beginning --bootstrap-server 172.17.0.1:9092

5.2 postgresql

insert into inventory.customers values (1005,'aA','bB','aAbB@home.com');

5.3 kafka显示结果

{"schema":{"type":"struct","fields":[{"type":"struct","fields":[{"type":"int32","optional":false,"default":0,"field":"id"},{"type":"string","optional":false,"field":"first_name"},{"type":"string","optional":false,"field":"last_name"},{"type":"string","optional":false,"field":"email"}],"optional":true,"name":"dbserver1.inventory.customers.Value","field":"before"},{"type":"struct","fields":[{"type":"int32","optional":false,"default":0,"field":"id"},{"type":"string","optional":false,"field":"first_name"},{"type":"string","optional":false,"field":"last_name"},{"type":"string","optional":false,"field":"email"}],"optional":true,"name":"dbserver1.inventory.customers.Value","field":"after"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"version"},{"type":"string","optional":false,"field":"connector"},{"type":"string","optional":false,"field":"name"},{"type":"int64","optional":false,"field":"ts_ms"},{"type":"string","optional":true,"name":"io.debezium.data.Enum","version":1,"parameters":{"allowed":"true,last,false,incremental"},"default":"false","field":"snapshot"},{"type":"string","optional":false,"field":"db"},{"type":"string","optional":true,"field":"sequence"},{"type":"string","optional":false,"field":"schema"},{"type":"string","optional":false,"field":"table"},{"type":"int64","optional":true,"field":"txId"},{"type":"int64","optional":true,"field":"lsn"},{"type":"int64","optional":true,"field":"xmin"}],"optional":false,"name":"io.debezium.connector.postgresql.Source","field":"source"},{"type":"string","optional":false,"field":"op"},{"type":"int64","optional":true,"field":"ts_ms"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"id"},{"type":"int64","optional":false,"field":"total_order"},{"type":"int64","optional":false,"field":"data_collection_order"}],"optional":true,"name":"event.block","version":1,"field":"transaction"}],"optional":false,"name":"dbserver1.inventory.customers.Envelope","version":1},"payload":{"before":null,"after":{"id":1005,"first_name":"aA","last_name":"bB","email":"aAbB@home.com"},"source":{"version":"2.2.0.Alpha3","connector":"postgresql","name":"dbserver1","ts_ms":1687946054175,"snapshot":"false","db":"postgres","sequence":"[\"34244288\",\"34244576\"]","schema":"inventory","table":"customers","txId":758,"lsn":34244576,"xmin":null},"op":"c","ts_ms":1687946054536,"transaction":null}}

附录-图形界面

debezium-ui

docker run -d --name debezium-ui -p 8080:8080 -e KAFKA_CONNECT_URIS=http://172.17.0.1:8083 debezium/debezium-ui:latest

kakfa-ui

待研究

基于Debezium与Kafka实现MySQL数据库实时变更监听实战指南 变更数据捕获(CDC)是一种通过解析数据库事务日志(如MySQL的binlog)来实时捕获数据增删改操作的技术。其核心原理是监听数据库的二进制日志流,将数据变更作为事件流发布,实现低延迟、高可靠的数据同步。CDC的技术价值在于彻底解耦数据生产与消费,避免了传统轮询查询带来的性能损耗与延迟问题,为构建实时数据管道提供了基础。在应用场景上,CDC广泛应用于电商库存实时更新、多系统数据同步、实时分析报表生成等领域。本文以Debezium和Kafka为核心,详细演示如何构建一个生产级的MySQL数据库监听管道,涵盖 阅读详情

相关推荐

从轮询到监听:基于Debezium与Kafka Connect构建实时数据管道实战

在数据驱动的现代架构中,数据同步是连接业务系统与分析平台的关键环节。传统基于定时轮询的同步方式存在延迟高、易漏数据、对业务侵入性强等固有缺陷。Change Data Capture(CDC)技术通过直接读取数据库事务日志(如MySQL的binlog),实现了从主动查询到被动监听的范式转变,能够以毫秒级延迟捕获数据的全量变更事件。这种技术为构建低延迟、高可靠的数据管道奠定了基石,其核心价值在于实现数据的实时流动与系统间的解耦。Debezium作为CDC领域的代表性开源工具,通过伪装为数据库从库并集成到Kafk

aibi9196的博客 497

连接postgresql_PostgreSQL逻辑解码实践(二) 使用Debezium连接器投递到Kafka

前言之前我们已经测试过逻辑解码插件wal2json,今天我们将尝试把逻辑解码的数据输出到 kafka中,以供其他应用的订阅使用。安装Kafka Connect环境Kafka Connect环境有两个模式,一个是独立安装模式,另一个是分布式安装模式。在本地开发和测试 Kafka Connect时,独立模式非常方便l还可以将其用于单一代理环境(如向 Kafka发送 web服务器日志)。而分布...

weixin_39531183的博客 535

Debezium CDC实战:从原理到生产部署,实现数据库变更实时捕获

CDC(变更数据捕获)是一种用于实时捕获和传播数据库变更的技术,其核心原理是通过读取数据库事务日志(如MySQL的binlog、PostgreSQL的WAL)来获取数据行的增、删、改操作,并以流的形式发布。这项技术的价值在于实现了数据源与下游系统间的解耦,为构建实时数据管道、保证数据一致性提供了基础支撑。在微服务架构、数据仓库同步、缓存更新和事件驱动系统等应用场景中,CDC能够替代传统的轮询或批处理方式,提供低延迟、高保真的数据流。本文聚焦于开源CDC工具Debezium,深入解析其基于Kafka Conn

weixin_34178244的博客 378

Debezium系列-Debezium Docker 快速入门

本文使用debezium 1.2,没有太多的干货,废话不多说,上来就开干,先来个Getting Started ! 快乐一下! 官方文档 , Getting Started 是基于docker的没有docker环境的小伙伴先自行准备。为了方便快速部署,将docker命令搬运过来,docker命令添加了参数: -d zookeeper docker run -d -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 debezium

数据新玩法 3430

利用Debezium捕获PostgreSQL的数据变化

最近团队接到这样一个需求,其他团队开发的业务系统需要监控我们负责的业务系统的数据库变更情况,当表发生INSERT,UPDATE及DELETE操作时,相关的业务系统能实时获取数据的变化信息。 经过讨论,团队决定使用Debezium实现需求,于是便对Debezium进行了较深入的学习。下面给大家分享一下自己对Debezium认识与理解。

Auspicious航的博客 3916

使用Docker部署debezium来监控 MySQL 数据库

Debezium是一个分布式平台,它将来自现有数据库的信息转换为事件流,使应用程序能够检测并立即响应数据库中的行级更改。Debezium构建在之上,并提供了一组兼容的连接器。每个连接器都与特定的数据库管理系统(DBMS)一起工作。连接器通过检测发生的变化来记录DBMS中数据变化的历史,并将每个变化事件的记录流式传输到。然后,消费应用程序可以从中读取结果事件记录。通过利用Kafka可靠的流平台,Debezium使应用程序能够正确和完整地消费数据库中发生的更改。

爱丹丹的博客 2216

数据同步Debezium的应用

背景 近期公司在响应国家软件规范要求,重点项目的数据库采用开源版postgresql(下文简称pg),业务端依然使用oracle。因此为了保证pg到oracle的数据同步问题,经过调研采用Debezium开源项目,实现 pg -> kafka-> oracle 的数据实时同步。 开始介绍重点… Debuzium简介 Debezium是Apache Kafka Connect的一组源连接器(source端),通过款实现剖析数据库中binlog日志,捕获数据,拷贝到kafka中,实现数据的实时抽取。

设计模式 1412

Debezium系列之:在K8s集群中部署Debezium Operator运行Debezium Server的详细步骤

Debezium系列之:在K8s集群中部署Debezium Operator运行Debezium Server的详细步骤

zhengzaifeidelushang的博客 894

PostgreSQL 数据远程备份操作

因为用到了kafka JDBC connector,但是kafka connect再部署的时候用的是Debezium的版本,所以会出现找不到执行类的报错,解决方法是把kafka JDBC connector 的jar包拷贝到容器的目录下(/kafka/connect/confluentinc-kafka-connect-jdbc/ 次目录需要进容器手工建立)。source也可以设置表的白名单。背景:产品数据需要从M端同步到B端,现在的用PG的主备方式备份满足了业务需求,所以需要使用其他的工具来满足需求。

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 1326

一个测试工程师走进一家酒吧……

一个测试工程师走进一家酒吧,要了一杯啤酒;一个测试工程师走进一家酒吧,要了一杯咖啡;一个测试工程师走进一家酒吧,要了 0.7 杯啤酒;一个测试工程师走进一家酒吧,要了-1 杯啤酒;一个测试...

字节跳动技术团队官方博客 4883

当兵心理测试软件,当兵心理测试题及答案

心理测试是一种比较先进的测试方法,它是指通过一系列手段,将人的某些心理特征数量化,来衡量个体心理因素水平和个体心理差异差异的一种科学测量方法。小编为你整理了当兵心理测试题及答案,希望对你有所参考帮助。征兵心理测试题(1代表是2代表否)1、我的胃口很好。12、我早上起来的时候,多半觉得睡眠充足,头脑清醒13、我喜欢看报纸上的犯罪新闻。14、有时我常感到困难重重,无法克服。25、我时常遇见一些所谓的专...

weixin_42128393的博客 1万+

Debezium示例项目推荐

Debezium示例项目是一个开源的、用于演示Debezium功能的集合。Debezium是一个开源的分布式平台,用于捕获和流式传输数据库的变更数据。该项目主要使用Java作为主要的编程语言,同时也涉及JavaScript、HTML、Shell、Dockerfile和TSQL等多种语言。 ## 项目核心功能 Debezium示例项目展示了如何配置和使用Debezium来捕获数据库的变更数据,并...

gitblog_00140的博客 474

新手也能玩转!用Panosim+MATLAB/Simulink搭建你的第一个智能驾驶仿真场景(保姆级图文)

本文为新手提供了使用Panosim和MATLAB/Simulink搭建智能驾驶仿真场景的详细教程。从环境准备、基础场景创建到仿真模型构建,一步步指导用户完成第一个智能驾驶仿真项目,帮助零基础用户快速上手并体验智能驾驶仿真的乐趣。

weixin_29090089的博客 179

browser-logos 项目 Vivaldi Snapshot 浏览器 Logo 获取与使用指南

本文围绕 browser-logos 开源仓库中 [src/vivaldi-snapshot/README.md](https://link.gitcode.com/i/1ee606305a84c1deb261d7d2e5f5fce7) 这份文档展开,系统讲解如何获取并集成 Vivaldi Snapshot 浏览器的高清 Logo 资源:既可以通过 `npm` / `Yarn` 安装独立 npm

gitblog_00306的博客 818

PX4飞控 vs 大疆A3:开源与闭源方案在无人机硬件架构中的实战对比

本文深入对比了PX4飞控与大疆A3在无人机硬件架构上的差异,分析了开源与闭源方案在工业级无人机开发中的优劣势。通过详细的硬件配置、传感器兼容性、扩展能力及性能测试数据,为开发者提供选型指南,特别适合需要自定义算法和复杂功能集成的项目。

a3b4c5的博客 886

AI工程化之生成式UI & A2UI(二)

本文介绍了生成式UI框架A2UI的架构设计与核心实现。项目采用AI协作开发模式,通过ATDD(AI驱动的测试驱动开发)确保代码质量。前端SDK基于zustand实现框架无关的状态管理,包含协议解析器、存储管理、渲染器等核心模块。重点展示了基础store构建、A2UI协议解析器的实现过程,包括mock数据准备、测试用例生成和可视化调试。项目采用monorepo管理,利用vite实现高效开发构建。整个系统设计遵循模块化原则,通过清晰的接口定义实现各组件解耦,为后续功能扩展打下基础。

qq_34306228的博客 405

终极指南:如何快速搭建Lago Kafka Connect数据管道实现精准计费

Lago是一款开源的计量和基于使用量的计费系统,为企业提供灵活的事件驱动计费解决方案。Kafka Connect作为Lago架构中的关键组件,负责在Kafka消息队列和ClickHouse时序数据库之间建立高效的数据管道,确保计费数据的实时同步和准确处理。本文将为您详细介绍如何在Lago项目中配置和使用Kafka Connect,构建稳定可靠的数据集成系统。💡 ## Lago架构中的Kafka

gitblog_00996的博客 764

LangChain与SkillLite集成:AI Agent安全沙箱实践

在AI与自动化技术领域,安全沙箱是实现可信计算的核心机制。其原理是通过资源隔离与权限控制,构建受限的执行环境。技术价值在于平衡功能开放性与系统安全性,尤其适用于处理用户提交的非受信代码或敏感数据。典型应用场景包括AI插件系统、在线代码评测平台等。本文以LangChain框架与SkillLite沙箱的深度集成为例,详解如何通过命名空间隔离、cgroups限制等机制,为AI Agent赋予安全执行动态技能的能力。其中涉及的关键技术点包括Python运行时隔离、动态资源配额管理,以及如何防范Shell注入等常见攻

weixin_34189116的博客 404

MySQL实时数据监听实战:基于Binlog与Debezium构建事件驱动架构

在数据驱动的现代应用中,实时数据处理已成为核心需求。其原理是通过捕获数据源的连续变更,将传统的批量轮询模式转变为事件驱动的流式处理。这项技术的核心价值在于实现业务响应的毫秒级延迟,支撑实时分析、风控和个性化推荐等场景。作为实现实时数据同步的关键技术,变更数据捕获(CDC)通过解析数据库日志或利用触发器,将数据变动转化为事件流。本文聚焦于MySQL Binlog解析这一主流方案,结合Debezium工具链,详细演示如何构建高可靠的实时数据管道,并深入探讨其在缓存更新、搜索索引等典型应用场景中的工程实践与避坑指

weixin_30256901的博客 441

为什么devc++编译项目会失败?提示gcc无法正常启动...

根据你的描述,编译能正常进行时,只打开源文件并没有问题,问题主要出现在创建项目后编译失败,这通常与 Makefile 配置、环境变量、编译器路径设置等因素有关。你可以检查 Makefile 配置,验证 DevC++ 的编译器环境设置,或者尝试清理并重新配置项目。如果问题仍然存在,可以尝试重装 DevC++ 或重新配置工具链。希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 1375

OpenHarmony RK3568 从 32 位切换到 64 位用户空间指南

修改了编译参数(如修复 Q5 后),但 ThinLTO 缓存中保留了旧参数编译的 bitcode。这是一种节省内存的设计(32 位指针占 4 字节 vs 64 位占 8 字节),但在某些场景下需要切换为纯 64 位。切换到 64 位用户空间后,CPU 全程运行在 AArch64 状态,不再需要 AArch32 兼容模式。内核本身已经是 64 位(aarch64),切换用户空间位数不影响内核。(32 位兼容层)在纯 64 位系统中不再需要,可以关闭以减小内核体积。这两个参数对 64 位编译毫无意义,配合。

程小二的博客 688

Debezium发布历史12

检查新连接器的最快方法是使用Debezium 的 Postgres docker 映像,该映像基于普通 Postgres docker 映像,在该映像之上编译并安装 PostgreSQL逻辑解码插件,并设置本地流式传输更改所需的权限(在localhost)在最近发布的 Debezium中,我们很高兴地宣布,除了现有的 MySQL 和 MongoDB 连接器之外,还添加了新的PostgreSQL 连接器。对于步骤 1 和 2,您可以查看我们的PostgreSQL 容器映像以及逻辑解码插件的源代码。

大蚊子 494

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Artie Transfer与Debezium集成:构建企业级CDC数据管道的完整指南

Artie Transfer是一个基于变更数据捕获(CDC)技术的实时数据库复制平台,通过与Debezium的深度集成,为企业构建高效、可靠的数据管道提供了终极解决方案。这个强大的组合能够将生产数据库的实时数据流式传输到数据仓库(如Snowflake、BigQuery、Redshift、Databricks等),实现分钟级延迟的数据同步。🚀 ## 什么是Artie Transfer与Debez

gitblog_00557的博客 363

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

kafka-docker-playground终极指南:如何快速构建170+连接器测试环境

Apache Kafka®和Confluent Platform的测试环境搭建一直是开发者和运维人员的痛点,特别是当需要测试不同连接器时。kafka-docker-playground项目完美解决了这个问题,它提供了完全自动化的Docker化测试环境,让你在几分钟内就能启动170+连接器的完整测试环境!🚀 ## 🌟 项目核心价值 kafka-docker-playground是一个革命性的

gitblog_01073的博客 587

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

postgresql&debezium搭建(非docker版本)

安装postgresql 参照Ubuntu上安装postgresql安装好postgresql 修改配置文件 这里采用debezium的pgoutput的形式,由于pgsql是11所以可以无侵入,下面打开逻辑复制功能 postgresql.conf wal_level = logical max_wal_senders = 10 max_replication_slots = 10...

Qbit编程学习笔记 2315

Debezium发布历史18

我们还将研究用于将 Debezium 发出的更改事件转换为平面表示的 SMT,例如,这与 JDBC 接收器连接器结合使用非常有用。虽然 0.6 计划更多地是一个“稳定版本”,但 0.7 应该会带来一个期待已久的主要功能:我们计划探索对 Oracle 的支持,并希望能够为该数据库发布 Debezium 连接器的初始版本。与之前的版本一样,0.5.2 版本修复了MySQL、Postgres和MongoDB连接器中的多个错误。请参阅变更日志,了解 Debezium 0.5.2 中修复的所有 19 个问题的概述。

大蚊子 389
上一篇: 通过Maxwell同步mariadb数据至kafka
下一篇: docker部署zabbix 6.0高可用集群实验
Re_Virtual
博客等级 码龄16年 88粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值