Kafka Connect使用入门-Mysql数据导入到ElasticSearch
1.Kafka Connect
Connect是Kafka的一部分,它为在Kafka和外部存储系统之间移动数据提供了一种可靠且伸缩的方式,它为连接器插件提供了一组API和一个运行时-Connect负责运行这些插件,它们负责移动数据。Connect以worker进程集群的方式运行,基于work进程安装连接器插件,然后使用REST API管理和配置connector,这些work进程都是长时间运行的作业。connector启动额外的task,利用work节点的资源以并行的方式移动大量的数据。SourceConnector负责从源系统读取数据,并把数据对象提供给work进程,SinkConnector负责从work进程获取数据,并把它们写入目标系统。
2.Connect中一些概念
连接器:实现了Connect API,决定需要运行多少个任务,按照任务来进行数据复制,从work进程获取任务配置并将其传递下去
任务:负责将数据移入或移出Kafka
work进程:相当与connector和任务的容器,用于负责管理连接器的配置、启动连接器和连接器任务,提供REST API
转换器:kafka connect和其他存储系统直接发送或者接受数据之间转换数据
3.运行Connect
- //分布模式
cd kafka/bin- sh connect-distributed.sh ../config/connect-distributed.properties
connect-distributed.properties中有一些配置:
- bootstrap.servers:kafka集群信息
- #相同id的connect worker属于一个Connect集群
- group.id:group.id=connect-cluster
- #定义数据在Kafka中存储形式
- key.converter=org.apache.kafka.connect.json.JsonConverter
- value.converter=org.apache.kafka.connect.json.JsonConverter
REST API查看、管理connectors
- 查看kafka支持的connector
- curl -X GET http://ip:8083/connector-plugins
- GET /connectors – 返回所有正在运行的connector名。
POST /connectors – 新建一个connector; 请求体必须是json格式并且需要包含name字段和config字段,name是connector的名字,config是json格式,必须包含你的connector的配置信息。
GET /connectors/{name} – 获取指定connetor的信息。
GET /connectors/{name}/config – 获取指定connector的配置信息。
PUT /connectors/{name}/config – 更新指定connector的配置信息。
GET /connectors/{name}/status – 获取指定connector的状态,包括它是否在运行、停止、或者失败,如果发生错误,还会列出错误的具体信息。
GET /connectors/{name}/tasks – 获取指定connector正在运行的task。
GET /connectors/{name}/tasks/{taskid}/status – 获取指定connector的task的状态信息。
PUT /connectors/{name}/pause – 暂停connector和它的task,停止数据处理知道它被恢复。
PUT /connectors/{name}/resume – 恢复一个被暂停的connector。
POST /connectors/{name}/restart – 重启一个connector,尤其是在一个connector运行失败的情况下比较常用
POST /connectors/{name}/tasks/{taskId}/restart – 重启一个task,一般是因为它运行失败才这样做。
DELETE /connectors/{name} – 删除一个connector,停止它的所有task并删除配置。
apache kafka默认支持FileStreamSinkConnector、FileStreamSourceConnector。Confluent实现很多开源的connector,也可以自己根据Connect API实现自定义的connector。
4. 连接器示例-从MySQL到ElasticSearch
4.1 下载连接器
confluentinc-kafka-connect-elasticsearch-5.0.0、confluentinc-kafka-connect-jdbc-5.0.0,将两个文件中lib中jar包放在运行connect worker节点中kafka安装路径下的lib目录,另外mysql-connector-java-5.1.22.jar也要放进去
confluent 中的连接器使用说明 https://docs.confluent.io/2.0.0/connect/connect-jdbc/docs/index.html
4.2 重启Connect
验证插件是否加载成功
- curl -X GET http://ip:8083/connector-plugins
- [{"class":"io.confluent.connect.elasticsearch.ElasticsearchSinkConnector","type":"sink","version":"5.0.0"},{"class":"io.confluent.connect.jdbc.JdbcSinkConnector","type":"sink","version":"5.0.0"},{"class":"io.confluent.connect.jdbc.JdbcSourceConnector","type":"source","version":"5.0.0"},{"class":"org.apache.kafka.connect.file.FileStreamSinkConnector","type":"sink","version":"1.0"},{"class":"org.apache.kafka.connect.file.FileStreamSourceConnector","type":"source","version":"1.0"}]
4.3 mysql建立测试表
- mysql> create table login(username varchar(50),login_time datetime);
- Query OK, 0 rows affected (0.73 sec)
- mysql> insert into login values('przhang',now());
- Query OK, 1 row affected (0.03 sec)
- mysql> insert into login values('peter',now());
- Query OK, 1 row affected (0.00 sec)
4.4 启动jdbc-connector
- echo '{"name":"mysql-login-connector","config":{"connector.class":"JdbcSourceConnector","connection.url":"jdbc:mysql://localhost:3306/dwwspdb?user=dw_wspdb&password=dw_wspdb","mode":"timestamp","table.whitelist":"login","validate.non.null":false,"timestamp.column.name":"login_time","topic.prefix":"mysql."}}' | curl -X POST -d @- http://ip:8083/connectors --header "Content-Type:application/json"
JdbcSourceConnector一些配置说明
connection.url,mysql数据库连接
mode:timestamp && "timestamp.column.name":"login_time",表示识别根据login_time时间列来识别增量数据,一旦这一列值发生变化,就会有一天新的记录写到kafka主题
mode:incrementing && "incrementing.column.id":"id",适合还有自增列的表,一旦有新的记录入mysq,就会有新的记录写到kafka主题
topic.prefix:mysql.,表示写到kafka的主题为mysql.表名
查看kafka主题中的消息
- sh kafka-console-consumer.sh --bootstrap-server=kafkaip:9092 --topic mysql.login --from-beginning
- {"schema":{"type":"struct","fields":[{"type":"string","optional":true,"field":"username"},{"type":"int64","optional":true,"name":"org.apache.kafka.connect.data.Timestamp","version":1,"field":"login_time"}],"optional":false,"name":"login"},"payload":{"username":"przhang","login_time":1540453531000}}
- {"schema":{"type":"struct","fields":[{"type":"string","optional":true,"field":"username"},{"type":"int64","optional":true,"name":"org.apache.kafka.connect.data.Timestamp","version":1,"field":"login_time"}],"optional":false,"name":"login"},"payload":{"username":"peter","login_time":1540453540000}}
- mysql数据更新:
- update login set login_time=now() where username='przhang';
- kafka实时输出:
- {"schema":{"type":"struct","fields":[{"type":"string","optional":true,"field":"username"},{"type":"int64","optional":true,"name":"org.apache.kafka.connect.data.Timestamp","version":1,"field":"login_time"}],"optional":false,"name":"login"},"payload":{"username":"przhang","login_time":1540454254000}}
4.5 启动ElasticsearchSinkConnector
- echo '{"name":"elastic-login-connector","config":{"connector.class":"ElasticsearchSinkConnector","connection.url":"http://ESIP:9200","type.name":"mysql-data","topics":"mysql.login","key.ignore":true}}' | curl -X POST -d @- http://ip:8083/connectors --header "Content-Type:application/json"
ElasticsearchSinkConnector一些配置:
connection.url,es连接
type.name,写入ES的索引类别
key.ignore=true,表示写入ES的每条记录的键为kafka主题名字+分区id+偏移量
从ES中查看数据:
- curl -X GET http://ESIP:9200/mysql.login/_search?pretty=true
- {
- "took" : 1,
- "timed_out" : false,
- "_shards" : {
- "total" : 5,
- "successful" : 5,
- "skipped" : 0,
- "failed" : 0
- },
- "hits" : {
- "total" : 5,
- "max_score" : 1.0,
- "hits" : [
- {
- "_index" : "mysqllogin",
- "_type" : "mysql-data",
- "_id" : "mysqllogin+3+0",
- "_score" : 1.0,
- "_source" : {
- "username" : "przhang",
- "login_time" : 1540453531000
- }
- },
- {
- "_index" : "mysqllogin",
- "_type" : "mysql-data",
- "_id" : "mysqllogin+3+3",
- "_score" : 1.0,
- "_source" : {
- "username" : "mayun",
- "login_time" : 1540454531000
- }
- },
- {
- "_index" : "mysqllogin",
- "_type" : "mysql-data",
- "_id" : "mysqllogin+3+2",
- "_score" : 1.0,
- "_source" : {
- "username" : "przhang",
- "login_time" : 1540454254000
- }
- },
- {
- "_index" : "mysqllogin",
- "_type" : "mysql-data",
- "_id" : "mysqllogin+3+4",
- "_score" : 1.0,
- "_source" : {
- "username" : "pony",
- "login_time" : 1540473988000
- }
- },
- {
- "_index" : "mysqllogin",
- "_type" : "mysql-data",
- "_id" : "mysqllogin+3+1",
- "_score" : 1.0,
- "_source" : {
- "username" : "peter",
- "login_time" : 1540453540000
- }
- }
- ]
- }
- }
Kafka Connect使用入门-Mysql数据导入到ElasticSearch的更多相关文章
- Logstash:把MySQL数据导入到Elasticsearch中
Logstash:把MySQL数据导入到Elasticsearch中 前提条件 需要安装好Elasticsearch及Kibana. MySQL安装 根据不同的操作系统我们分别对MySQL进行安装.我 ...
- 使用Logstash把MySQL数据导入到Elasticsearch中
总结:这种适合把已有的MySQL数据导入到Elasticsearch中 有一个csv文件,把里面的数据通过Navicat Premium 软件导入到数据表中,共有998条数据 文件下载地址:https ...
- Logstash学习之路(四)使用Logstash将mysql数据导入elasticsearch(单表同步、多表同步、全量同步、增量同步)
一.使用Logstash将mysql数据导入elasticsearch 1.在mysql中准备数据: mysql> show tables; +----------------+ | Table ...
- Sqoop将mysql数据导入hbase的血与泪
Sqoop将mysql数据导入hbase的血与泪(整整搞了大半天) 版权声明:本文为yunshuxueyuan原创文章.如需转载请标明出处: https://my.oschina.net/yunsh ...
- 使用sqoop把mysql数据导入hive
使用sqoop把mysql数据导入hive export HADOOP_COMMON_HOME=/hadoop export HADOOP_MAPRED_HOME=/hadoop cp /hive ...
- 使用 sqoop 将mysql数据导入到hive表(import)
Sqoop将mysql数据导入到hive表中 先在mysql创建表 CREATE TABLE `sqoop_test` ( `id` ) DEFAULT NULL, `name` varchar() ...
- 使用 sqoop 将mysql数据导入到hdfs(import)
Sqoop 将mysql 数据导入到hdfs(import) 1.创建mysql表 CREATE TABLE `sqoop_test` ( `id` ) DEFAULT NULL, `name` va ...
- 使用sqoop将mysql数据导入到hive中
首先准备工具环境:hadoop2.7+mysql5.7+sqoop1.4+hive3.1 准备一张数据库表: 接下来就可以操作了... 一.将MySQL数据导入到hdfs 首先我测试将zhaopin表 ...
- MySQL数据导入导出方法与工具mysqlimport
MySQL数据导入导出方法与工具mysqlimport<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office ...
随机推荐
- python request 请求https报错问题
旁边大佬让我重新写一个某XX监控脚本 需要请求https遇到了如下的问题 花了一下午解决这个问题... 害太菜,.... 遇到的问题: requests.post 发送https请求的时候 ...
- POJ1390 Blocks (区间DP)
题目链接:POJ 1390.Blocks 题意: 有n个方块排成一列,每个方块有颜色即1到n的一个值,每次操作可以把一段相同颜色的方块拿走,长度为k,则获得的分数为 \(k\times k\),求可获 ...
- 在FL Studio中如何更好地为人声加上混响(进阶教程)
为人声加上混响是我们在处理人声过程中必不可少的一步.然而,除了直接在人声混音轨道加上混响插件进行调节以外,这里还有更为细节的做法可以达到更好的效果. 步骤一:使用均衡器 在为人声加上混响之前,我们应该 ...
- 关于Java里方法重载
覆盖和重载很重要,并且比较容易混淆,所以面试中常见.基础回答:覆盖(Override),又叫重写,是指子类对父类方法的一种重写,方法名.参数列表必须相同,返回值小于父类,只能比父类抛出更少的异常,访问 ...
- Java基础教程——RunTime类
RunTime类 java.lang.RunTime类代表Java程序的运行时环境. 可以进行垃圾回收(gc()),可以进行系统资源清理(runFinalization()): 可以加载文件(load ...
- 3.深入Istio:Pilot配置规则ConfigController
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 本文使用的Istio源码是 release 1.5. Config Controller ...
- MySQL必知必会:简介undo log、truncate、以及undo log如何帮你回滚事物
目录 一.前言 二.undo log表空间 三.关于undo log默认的配置 四.如何将undo log放到单独的表空间 文章公众号首发,持续更新中 五.rollback segment 六.什么是 ...
- 有了Git这个操作,我再也不怕代码混乱了!
大家好,今天的文章我们来介绍git当中一个非常常用的功能--储藏. 大家在协同开发的时候应该都有这样的经历,有的时候我们的功能开发了一半,因为某些原因我们想要checkout到其他的分支上查看代码或者 ...
- 如何破解QQ闪照
1.如何下载 通过公主公众号 "全是软件" 然后输入 294 即可获得下载链接 https://qsrj.lanzous.com/iU4Hddnnmne 目前的闪照破解工具只能破解 ...
- Spring Boot 使用 XXL-JOB
一.配置部署调度中心 1.1 下载源码 https://github.com/xuxueli/xxl-job 1.2 数据库初始化 执行 /xxl-job/doc/db/tables_xxl_job. ...