Kafka-connect-jdbc-source连接mysql数据库实战

Kafka-connect-jdbc-source连接mysql数据库实战

1、创建mysql数据库

为避免使用kafka连接数据库时意外修改或删除数据,建议单独创建一个只读用户(kafka),仅用于读取数据;

使用root操作,进行如下操作

-- 创建数据库
create database test;
-- 创建只读用户
create user 'kafka'@'127.0.0.1' identified by '123456';
-- 赋予查询授权
grant select on test.* to 'kafka'@'127.0.0.1';
-- 刷新权限
flush privileges;

-- 创建测试表
CREATE TABLE `sys_config` (
  `cfg_id` int(11) NOT NULL,
  `cfg_name` varchar(20) DEFAULT NULL,
  `cfg_notes` varchar(50) DEFAULT NULL,
  `cfg_value` varchar(20) DEFAULT NULL,
  `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`cfg_id`)
)

使用kafka登录mysql,验证是否可以正常访问数据库:

mysql -u kafka -p -h 127.0.0.1 

2、Mysql源连接配置

mysql源连接文件:
mysql-whitelist-timestamp-source.properties

name=mysql-whitelist-timestamp-source
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
tasks.max=10

connection.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&user=kafka&password=123456&serverTimezone=Asia/Shanghai
table.whitelist=sys_config

mode=timestamp
timestamp.column.name=modified

topic.prefix=mysql-

3、启动源连接器

启动脚本:8.1-kafka-connect-jdbc.bat

@echo off 
rem 启动8.1-connect-jdbc
title connect-jdbc-[%date% %time%]

rem 设置connect-jdbc路径
set CLASSPATH=%cd%\plugins\kafka-connect-jdbc\*

rem connect 连接mysql
bin\windows\connect-standalone.bat config/connect-standalone.properties config/mysql-whitelist-timestamp-source.properties
pause

运行截图在这里插入图片描述
暂时不要纠结于找不到驱动的错误,实践过程中,即使用官方提供的文件源连接示例也提示类似找不到插件的问题,但是不影响使用(PS:为了这个问题,尝试添加了一堆jar包,但由于依赖层级关系问题,仍未解决报错问题,但是不影响使用)

ERROR Plugin class loader for connector: ‘io.confluent.connect.jdbc.JdbcSourceConnector’ was not found. Returning: org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader@129b4fe2 (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

4、查看连接器插件信息

http://127.0.0.1:8083/connector-plugins
在这里插入图片描述

5、启动Kafka-消费端控制台

为了验证数据是否从mysql读取到kafka,启动消费端验证:
文件:8.2-kafka-connect-jdbc-consumer.bat

@echo off 
rem 8.2-kafka-connect-jdbc-consumer
title kafka-connect-jdbc-consumer-[%date% %time%]
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic mysql-sys_config --from-beginning
pause

运行截图
测试时,中文部分显示总数出现乱码,原因未知,使用java测试时显示正常:
在这里插入图片描述

6、启动Java消费端

import java.time.Duration;
import java.util.Arrays;
import java.util.Properties;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class ConsumerMySql {
	public static void main(String[] args) {
		autoCommitConsumer();
	}

	/**
	 * 自动提交
	 */
	public static void autoCommitConsumer() {
		Properties props = new Properties();
		props.setProperty("bootstrap.servers", "localhost:9092");
		props.setProperty("group.id", "test");
		props.setProperty("enable.auto.commit", "true");
		props.setProperty("auto.commit.interval.ms", "1000");
		props.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
		props.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
		KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
		consumer.subscribe(Arrays.asList("mysql-sys_config"));
		System.out.println("开始接收消息。。。");
		while (true) {
			ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
			for (ConsumerRecord<String, String> record : records) {
				// System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(),
				// record.key(), record.value());
				JSONObject jo = JSON.parseObject(record.value());
				String v = jo.getString("payload");
				System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), v);
			}
		}
	}

}

整体运行截图

在这里插入图片描述

遗留问题

1、数据删除操作无法自动同步,研究中,等待下回分解;
2、时间戳字段,目前需要手工更新,数据才能够正常同步,后期需要修改为通过触发器自动进行更新;

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
kafka-connect-transform-kryptonite 是 Kafka Connect 的一个转换器插件。Kafka Connect 是一个可扩展的分布式数据集成工具,可用于在 Apache Kafka 和外部系统之间进行可靠和高效的数据流传输。而 Kafka Connect 转换器是用于对数据进行转换、过滤或处理的插件。 Kafka Connect 是一个开源的分布式数据集成框架,用于连接和处理来自各种数据源的数据,例如数据库、消息队列和文件系统等。它提供了一个统一的、可扩展的架构,允许用户将数据从多个来源导入到 Kafka 中,并将数据导出到多个目标系统。这为数据集成提供了更加灵活和可靠的方式,且能够满足各种实时数据处理的需求。 Kafka Connect 的一个关键特性是插件化的架构,使得用户可以根据自己的需求,选择和配置合适的插件。其中,kafka-connect-transform-kryptonite 插件就是其中之一。Kryptonite 可以理解为一种“解除”或“削弱”转换器,它可能采用一些特定的规则或算法,对输入的数据进行加工、转换或过滤。 使用 kafka-connect-transform-kryptonite 插件,我们可以根据具体的业务需求,对 Kafka 中的消息进行处理。例如,我们可以通过 Kryptonite 转换器,将消息中的某些字段进行加密,以保护敏感数据的安全;或者根据一些规则,对消息进行过滤和筛选,只保留我们关心的数据。 总之,kafka-connect-transform-kryptonite 是 Kafka Connect 提供的一个转换器插件,可以用于对数据进行加工、转换和过滤。通过这个插件,我们可以根据业务需求对 Kafka 中的消息进行定制化处理,以满足不同场景下的数据集成和处理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值