Debezium for PostgreSQL to Kafka

Debezium for PostgreSQL to Kafka

​ Debezium连接器与Kafka Connect框架一起使用,以捕获数据库中的更改并生成更改事件。然后,Kafka Connect工作程序将为连接器配置的转换应用于连接器生成的每个消息,使用工作程序的转换器将每个消息键和值序列化为二进制形式,最后将每个消息写入正确的Kafka主题。

Debezium的PostgreSQL连接器包含两个不同的部分,它们可以一起工作,以便能够读取和处理服务器更改:

  • 必须在PostgreSQL服务器中安装和配置的逻辑解码输出插件,其中之一
    • decoderbufs(由Debezium社区维护,基于ProtoBuf)
    • wal2json(由wal2json社区维护,基于JSON)
    • pgoutput,PostgreSQL 10+中的标准逻辑解码插件(由Postgres社区维护,由Postgres自身用于逻辑复制);该插件始终存在,这意味着不必安装任何其他库,并且Debezium连接器将直接将原始复制事件流解释为更改事件。

所以使用pgoutput,postgresql不用再安装插件

修改postgresql配置文件

postgresql 中配置 postgresql.conf

文件位置PostgreSQL\11\data

wal_level = logical

Debezium for PostgreSQL to Kafka_第1张图片

PostgreSQL的Debezium连接器

下载链接:https://debezium.io/documentation/reference/1.0/install.html

Debezium for PostgreSQL to Kafka_第2张图片

将上述标红文件添加到kafka kafka_2.12-2.3.0\libs 文件夹中

启动kafaka connector

connect-distributed.bat ../../config/connect-distributed.properties

connector 默认端口号为:8083

相关api
api 说明
GET /connectors/{name} 查询指定connector配置的
POST /connectors 增加一个connector配置
PUT /connectors/{name}/config 更新指定connector配置的
GET /connectors/{name}/status 查询指定connector状态的
GET /connectors/{name}/tasks 查询指定connector的所有tasks
GET /connectors/{name}/tasks/{taskid}/status 查询指定connector的指定task的状态的,taskid一般是0,1,2之类
PUT /connectors/{name}/pause 暂停指定connector的,慎用,比如因为系统更新升级,想停掉source connector拉取消息
PUT /connectors/{name}/resume 恢复上面暂停的connector的
POST /connectors/{name}/restart 重启一个connector(connector因为一些原因挂掉了,比如被强行杀死,一般不是异常造成)
POST /connectors/{name}/tasks/{taskId}/restart 重启一个指定的task的
DELETE /connectors/{name} 删除一个connector
GET /connector-plugins 获取所有已安装的connector插件
PUT /connector-plugins/{connector-type}/config/validate 校验connector的配置的属性类型。

增加postgresql connector

POST /connectors

例如:

Debezium for PostgreSQL to Kafka_第3张图片

{
    "name": "inventory-connector2",
    "config": {
        "name": "inventory-connector2",
        "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
        "tasks.max": "1",
        "database.hostname": "localhost",
        "database.port": "5432",
        "database.dbname": "test",
        "database.user": "postgres",
        "database.password": "postgres",
        "database.server.name": "test",
        "table.whitelist": "public.test",
        "plugin.name": "pgoutput"
    }
}

详细说明查看:https://debezium.io/documentation/reference/1.0/connectors/postgresql.html

属性 默认 描述
name 连接器的唯一名称。再次尝试使用相同名称注册将失败。(所有Kafka Connect连接器都需要此属性。)
connector.class 连接器的Java类的名称。始终io.debezium.connector.postgresql.PostgresConnector对PostgreSQL连接器使用值。
tasks.max 1 为此连接器应创建的最大任务数。PostgreSQL连接器始终使用单个任务,因此不使用该值,因此默认值始终可以接受。
plugin.name decoderbufs 安装在服务器上的Postgres的名称。支持的值是decoderbufswal2jsonwal2json_rdswal2json_streaming(在0.8.0.Beta1加入), wal2json_rds_streaming(在0.8.0.Beta1加入)和pgoutput(在0.10.0.Beta3加入)当处理的事务非常大时,事务中JSON所有更改的批处理事件可能无法放入大小为1 GB的硬编码内存缓冲区中。在这种情况下,当事务中的每个更改作为单独的消息从PostgreSQL发送到Debezium时,都可以切换到所谓的模式。
slot.name debezium 为从插件和数据库实例进行流式更改而创建的Postgres逻辑解码插槽的名称。值必须符合Postgres复制插槽的命名规则,该规则指出:“每个复制插槽都有一个名称,该名称可以包含小写字母,数字和下划线字符。”
slot.drop.on.stop false 连接器有序完成时是否删除逻辑复制插槽。仅应true在测试或开发环境中设置。删除插槽可让数据库丢弃WAL段,因此可能会发生以下情况:重新启动后,连接器无法从之前中断的WAL位置恢复。
publication.name dbz_publication 使用时为流式传输而创建的PostgreSQL出版物的名称已创建pgoutput。如果该出版物尚不包含所有表,则将在启动时创建该出版物。然后,Debezium将使用其自己的白名单/黑名单过滤功能将更改事件限制为感兴趣的特定表(如果已配置)。请注意,连接器用户必须具有超级用户权限才能创建此发布,因此通常最好先创建发布。如果发布已经存在(针对所有表或已配置表的子集),则Debezium将改为使用定义的发布。
database.hostname PostgreSQL数据库服务器的IP地址或主机名。
database.port 5432 PostgreSQL数据库服务器的整数端口号。
database.user 连接到PostgreSQL数据库服务器时要使用的PostgreSQL数据库的名称。
database.password 连接到PostgreSQL数据库服务器时使用的密码。
database.dbname 从中流式传输更改的PostgreSQL数据库的名称
database.server.name 逻辑名称,用于标识特定的PostgreSQL数据库服务器/集群并为其提供名称空间。逻辑名称在所有其他连接器上都应该是唯一的,因为它用作来自该连接器的所有Kafka主题名称的前缀。
schema.whitelist 可选的以逗号分隔的正则表达式列表,与要监视的模式名称匹配;白名单中未包含的任何架构名称都将被排除在监视范围之外。默认情况下,将监视所有非系统架构。不可与一起使用schema.blacklist
schema.blacklist 可选的用逗号分隔的正则表达式列表,这些列表与要从监视中排除的模式名称匹配;除系统架构外,所有未列入黑名单的架构名称都将受到监控。不可与一起使用schema.whitelist
table.whitelist 可选的以逗号分隔的正则表达式列表,与要监视的表的标准表标识符匹配;白名单中未包含的任何表都将被排除在监视范围之外。每个标识符的格式为schemaNametableName。默认情况下,连接器将监视每个受监视模式中的每个非系统表。不可与一起使用table.blacklist
table.blacklist 可选的以逗号分隔的正则表达式列表,与要从监视中排除的表的标准表标识符匹配;黑名单中未包含的任何表格都将受到监控。每个标识符的格式为schemaName.tableName。不可与一起使用table.whitelist
column.blacklist 与逗号的全限定名匹配的正则表达式的可选逗号分隔列表,应将其排除在更改事件消息值之外。列的完全限定名称的格式为schemaName.tableName.columnName

消费消息

kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic  test.public.test  --from-beginning

Debezium for PostgreSQL to Kafka_第4张图片

修改表数据

Debezium for PostgreSQL to Kafka_第5张图片

你可能感兴趣的:(Java-Web)