08-构建数据管道

前言

该章节将介绍如何构建数据管道。
环境:
Kafka-2.1.1 + Kafka集群

1. 运行Connect

可以运行worker集群,由于节点数量有限,这里使用一个worker。

  1. 修改config/connect-distributed.properties (写上运行kafka的主机)
    在这里插入图片描述
  2. 运行
    注:所有节点开启zookeeper,slave1,slave2,slave3开启kafka服务
connect-distributed.sh  config/connect-distributed.properties
  1. 查看已安装好的插件(两个)
hadoop@master:~/kafka-2.1.1$ !curl
curl http://master:8083/connector-plugins
[{"class":"org.apache.kafka.connect.file.FileStreamSinkConnector","type":"sink","version":"2.1.1"},
{"class":"org.apache.kafka.connect.file.FileStreamSourceConnector","type":"source","version":"2.1.1"}]

2. 文件数据源和文件数据池

注:下面的 http://slave3:8083 中的slave3 改为自己启动 connect 服务的主机名(例如,博主这使用的是slave3,下一个小节博主改成了master,你不用修改

echo '{"name":"load-kafka-config", \
"config":{"connector.class":"FileStreamSource", \
"file":"/home/hadoop/kafka-2.1.1/config/server.properties", "topic":"kafka-config-topic"}}' | \
curl -X POST -d @- http://slave3:8083/connectors --header "content-Type:application/json"

file:路径根据自己的路径设置
在这里插入图片描述

kafka-console-consumer.sh  --bootstrap-server master:9092 \
--topic kafka-config-topic --from-beginning

08-构建数据管道_第1张图片

echo '{"name":"dump-kafka-config", \
"config":{"connector.class":"FileStreamSink", \
"file":"/home/hadoop/kafka-2.1.1/config/copy-server.properties", \
"topics":"kafka-config-topic"}}' | \
curl -X POST -d @- http://slave3:8083/connectors --header "content-Type:application/json"

connector.class改为数据池(FileStreamSink),topic改为topics(因为数据池可以将多个主题写入一个文件,数据源只能被写入一个主题)
在这里插入图片描述
查看:
在这里插入图片描述

删除连接器:

curl -X DELETE http://slave3:8083/connectors/load-kafka-config

3. 从MySQL到ElasticSearch

安装elasticsearch 和 jdbc 的连接器。
下载:
链接:https://pan.baidu.com/s/10FrQG1QxfD_Khevvm3M_aQ
提取码:vlfj

  1. 安装Elasticsearch
    解压:
tar -zxvf elasticsearch-6.7.0.tar.gz -C ~/
  1. 创建 plugins 目录
    先修改 connect-distributed.properties
    在文件最后,添加如下内容(该目录的作用是插件将放在该目录):
    在这里插入图片描述
    然后:
mkdir kafka-2.1.1/plugins
  1. 解压elasticsearch 和 jdbc()(源文件为 zip格式)
    在这里插入图片描述
    第一步:复制 mysql-connector-java-5.1.44-bin.jar 到 kafka-2.1.1/libs/目录下。
    如果报错,执行第二步:如果后面从MySQL导入数据到Kafka 报了JDBC之类的连接错误。先关闭connect 服务,设置jar 的classpath,如:
# 直接在控制台执行
CLASSPATH=/home/hadoop/kafka-2.1.1/libs/mysql-connector-java-5.1.44-bin.jar
  1. 启动elasticsearch 和 connect-distributed
/bin/elasticsearch
connect-distributed.sh  config/connect-distributed.properties

各节点服务如下:
08-构建数据管道_第2张图片

  1. 查看加载的连接器插件(加上原来的就5个插件,书上是4个,可能是因为版本的问题):
    08-构建数据管道_第3张图片

从MySQL到Kafka:

  1. 在数据库创建测试表:
mysql> create database test
    -> ;
Query OK, 1 row affected (0.00 sec)

mysql> use test
Database changed
mysql> create table login(username varchar(30), login_time datetime);
Query OK, 0 rows affected (0.11 sec)

mysql> insert into login values('jack', now());
Query OK, 1 row affected (0.11 sec)

mysql> insert into login values('tom', now());
Query OK, 1 row affected (0.05 sec)

mysql> insert into login values('rose', now());
Query OK, 1 row affected (0.16 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)
  1. 配置JDBC连接器
    命令:
echo '{"name":"mysql-login-connector", \
"config":{"connector.class":"JdbcSourceConnector", \
"connection.url":"jdbc:mysql://127.0.0.1:3306/test?user=root&password=123456", \
"mode":"timestamp", "table.whitelist":"login", "validate.non.null":false, \
"timestamp.column.name":"login_time", "topic.prefix":"mysql."}}' \
| curl -X POST -d @- http://master:8083/connectors --header "content-Type:application/json"

结果:
08-构建数据管道_第4张图片
8. 查看mysql.login 主题数据:
08-构建数据管道_第5张图片
与此同时,如果你在mysql 新插入一条数据,在kafka中会同步打印出来(没有关闭读取消息的进程)

从Kafka到Elasticsearch:

  1. 可以查看elasticsearch 的相关信息,并验证是否访问本地端口:
    08-构建数据管道_第6张图片
  2. 启动连接器
echo '{"name":"elastic-login-connector", \
"config":{"connector.class":"ElasticsearchSinkConnector", \
"connection.url":"http://localhost:9200", \
"type.name":"mysql-data", "topics":"mysql.login", \
"key.ignore":true}}' | \
curl -X POST -d @- http://master:8083/connectors --header "content-Type:application/json"

结果:
08-构建数据管道_第7张图片
解析:connection.url 是elasticsearch服务器地址。默认情况下,每个kafka主题对应elasticsearch里的一个索引,主题名字与索引名字相同。type.namemysql-data为写入的数据定义类型。在创建mysql数据表时未指定主键,这里使用主题名字、分区id和偏移量作为主键,所以设置key.ignore=true。

  1. 验证是否为 mysql.login 主题的数据创建好了索引
    在这里插入图片描述
    虽然这里能够看到创建了mysql.login 索引,但却看不到记录(红框)。

原因:
启动connector 时,没有加载 elasticsearch配置,将启动的connect关闭:
创建如下文件:
kafka-2.1.1/config/quickstart-elasticsearch.properties
在 quickstart-elasticsearch.properties 中添加如下内容:

##
# Copyright 2016 Confluent Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
##

name=elasticsearch-sink
connector.class=io.confluent.connect.elasticsearch.ElasticsearchSinkConnector
tasks.max=1
topics=test-elasticsearch-sink
key.ignore=true
connection.url=http://localhost:9200
type.name=kafka-connect

再次启动connect :

connect-distributed.sh connect-distributed.properties quickstart-elasticsearch.properties

再次查看,有5条数据:
在这里插入图片描述

  1. 查询数据
    08-构建数据管道_第8张图片

除了已有的连接器,也可以构建自己的连机器。
其他连接器:https://www.confluent.io/product/connertors

你可能感兴趣的:(Kafka,kafka学习)