如何在不使用 Docker 或 Windows Server 2016 上的 Confluent 平台的情况下在 Kafka 中设置 Debezium SQL Server 连接器?

Posted

技术标签:

【中文标题】如何在不使用 Docker 或 Windows Server 2016 上的 Confluent 平台的情况下在 Kafka 中设置 Debezium SQL Server 连接器?【英文标题】:How do I set up a Debezium SQL Server connector in Kafka without using Docker nor the Confluent Platform on Windows Server 2016? 【发布时间】:2021-04-08 11:25:27 【问题描述】:

我正在尝试在独立模式下使用 Kafka 捕获 SQL Server 数据库中的一些更改。 在这个任务中,Confluent 平台和 Docker 不是选项。

源数据库上的 CDC 已启用。在 Kafka 方面,我遇到了 Debezium 连接器的问题。我将在下面描述更多细节:

--- zookeeper.properties:

dataDir=C:/kafka_2.13-2.7.0/data

clientPort=2181

maxClientCnxns=0

admin.enableServer=false

--- server.properties:

broker.id=0

listeners=PLAINTEXT://localhost:9092

num.network.threads=3

num.io.threads=8

socket.send.buffer.bytes=102400

socket.receive.buffer.bytes=102400

socket.request.max.bytes=104857600

log.dirs=C:/kafka_2.13-2.7.0/kafka-logs

num.partitions=1

num.recovery.threads.per.data.dir=1

offsets.topic.replication.factor=1

transaction.state.log.replication.factor=1

transaction.state.log.min.isr=1

log.retention.hours=168

log.segment.bytes=1073741824

log.retention.check.interval.ms=30000

zookeeper.connect=localhost:2181

zookeeper.connection.timeout.ms=18000

group.initial.rebalance.delay.ms=0

auto.create.topics.enable=true

delete.topic.enable=true

--- sqlserver-source-connector.properties:

name=sqlserver-connector

connector.class=io.debezium.connector.sqlserver.SqlServerConnector 

database.hostname=myhostname 

database.port=1433 

database.user=sa 

database.password=mySuperSecretPassord

database.dbname=myDbName 

database.server.name=myhostname

table.include.list=dbo.employes 

database.history.kafka.bootstrap.servers=myhostname:9092 

database.history.kafka.topic=dbhistory.fullfillment

key.converter=org.apache.kafka.connect.json.JsonConverter

value.converter=org.apache.kafka.connect.json.JsonConverter

offset.storage.file.filename=C:/kafka_2.13-2.7.0/connect.offsets

bootstrap.servers=localhost:9092

--- file-employes-sink.properties:

name=file-employes-sink

connector.class=FileStreamSink

tasks.max=1

file=file-employes-sink.txt

topics=myhostname.dbo.EMPLOYES

当我尝试运行时

.\connect-standalone.bat ..\..\config\sqlserver-source-connector.properties ..\..\config\file-employes-sink.properties

并检查可以通过链接 http://localhost:8083/connectors 创建的连接器,这是我得到的:

[“文件-雇员-接收器”]

这意味着我只能创建我的接收器连接器,对吗? 我的源连接器呢?不应该列在这里吗?

【问题讨论】:

【参考方案1】:

您需要提供connect-standalone.properties 作为connect-standalone 的第一个参数来配置worker

然后您提供两个连接器属性文件来启动两个连接器

您也可以使用 connect-distributed 及其属性文件,然后通过 HTTP POST 两个连接器配置


虽然 Confluent 平台不正式支持 Windows,但它仍然可以正常工作。 Docker 也会如此

【讨论】:

感谢您的回复。听从您的建议后,我遇到了一个新问题:“找不到任何实现 Connector 且名称与 io.debezium.connector.sqlserver.SqlServerConnector 匹配的类。”我已经在我的属性文件中添加了参数 plugin.path=C:/kafka_2.13-2.7.0/plugins ,并且 Debezium 文件夹也在此路径中,但它仍然无法正常工作。有什么想法吗? 我不确定你的“debezium 文件夹”中有什么,但只要你有 plugins/debezium-connector-sqlserver/debezium-connector-sqlserver-[version].jar,它应该可以工作,尽管我从未将 Windows 与任何 Kafka 工具一起使用 这只是connector.class参数值后面的一个空格。它现在正在工作。感谢您的帮助! 啊。随意使用帖子旁边的复选标记接受答案

以上是关于如何在不使用 Docker 或 Windows Server 2016 上的 Confluent 平台的情况下在 Kafka 中设置 Debezium SQL Server 连接器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 Docker-Hub 的情况下共享我的 Docker-Image?

Docker 构建拉取访问被拒绝,存储库不存在或可能需要

p5.j​​s:如何在不改变背景或使用外部画布的情况下在画布形状上打孔?

如何在不使用 pull 命令的情况下下载 Docker 镜像?

如何在不使用 *** 映像的情况下连接到 docker 中的 ***?

如何允许表单在不处理 Windows 消息的情况下接受文件删除?