目录
阅读时间: 3 分钟
概述。
大家好,在这篇博客中,我们将看到一个Kafka连接的例子,在这个例子中,我们将把一个MySQL表,流到一个Kafka主题,然后从那里加载到Elasticsearch并对其内容进行索引。
安装。
现在,首先我们要在本地系统中安装MySQL和Elastic search。对于安装,只需运行。
sudo install mysql
sudo install elasticsearch
下一步是确保你有连接器。有几个选择。
- 使用Confluent Hub下载并安装现在我们需要加载这些连接器。创建一个目录,比如/opt/connectors,并更新config/connect-distributed.properties以包括plugin.path=/opt/connectors。客户端(https://docs.confluent.io/home/connect/confluent-hub/client.html)
- 从Confluent Hub网站(或其他任何你感兴趣的连接器所在的网站)下载。
- 从源代码构建。要做到这一点,你需要。
-
- 克隆连接器的源代码。
git clone https://github.com/confluentinc/kafka-connect-elasticsearch
-
- 运行mvn install -DskipTests来构建项目。
- 重复JDBC连接器的做法。
加载Kafka连接器。
现在我们需要加载这些连接器。创建一个目录,比如/opt/connectors,并更新config/connect-distributed.properties以包括plugin.path=/opt/connectors。
然后把在你构建每个
连接器的目标目录下创建的jars,以及它们的依赖关系,复制到plugin.path的相应子目录中。
gwen$ mkdir /opt/connectors/jdbc
gwen$ mkdir /opt/connectors/elastic
gwen$ cp …/kafka-connect-jdbc/target/kafka-connect-jdbc-10.3.x-
SNAPSHOT.jar /opt/connectors/jdbc
gwen$ cp ../kafka-connect-elasticsearch/target/kafka-connect-
elasticsearch-11.1.0-SNAPSHOT.jar /opt/connectors/elastic
gwen$ cp ../kafka-connect-elasticsearch/target/kafka-connect-
elasticsearch-11.1.0-SNAPSHOT-package/share/java/kafka-connect-
elasticsearch/* /opt/connectors/elastic
此外,由于我们需要连接的不仅仅是任何数据库,而是专门连接到
MySQL,你需要下载并安装一个MySQL JDBC驱动程序。由于许可证的原因,驱动
,不随连接器一起发货。你可以从MySQL网站(https://dev.mysql.com/downloads/connector/j/)下载驱动程序
,然后将jar放在/opt/connectors/jdbc中。
之后,重新启动Kafka Connect工作者,检查新的连接器插件是否被
。
gwen$
bin/connect-distributed.sh config/connect-distributed.properties &
gwen$ curl http://localhost:8083/connector-plugins
[
{
"class": "io.confluent.connect.elasticsearch.ElasticsearchSinkConnector",
"type": "sink",
"version": "11.1.0-SNAPSHOT"
},
{
"class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"type": "sink",
"version": "10.3.x-SNAPSHOT"
},
{
"class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"type": "source",
"version": "10.3.x-SNAPSHOT"
}
然而,从上面的情况来看,我们可以看到,现在我们的Connect集群中有额外的连接器插件可用。
在MySQL中创建表。
之后,下一步是在MySQL中创建一个表,我们可以使用我们的
JDBC连接器将其流到Kafka。
gwen$ mysql.server restart
gwen$ mysql --user=root
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.02 sec)
mysql> insert into login values ('gwenshap', now());
Query OK, 1 row affected (0.01 sec)
mysql> insert into login values ('tpalino', now());
Query OK, 1 row affected (0.00 sec)
同样,你可以看到,我们创建了一个数据库和一个表,并插入了几行作为
的例子。
因此,下一步是配置我们的JDBC源连接器。我们可以通过查看文档来了解哪些con-
figuration选项是可用的,但我们也可以使用
REST API来寻找可用的配置选项。
gwen$ curl -X PUT -d '{"connector.class":"JdbcSource"}' localhost:8083/
connector-plugins/JdbcSourceConnector/config/validate/ --header "content-
Type:application/json"
{
"configs": [
{
"definition": {
"default_value": "",
"dependents": [],
"display_name": "Timestamp Column Name",
"documentation": "The name of the timestamp column to use
to detect new or modified rows. This column may not be
nullable.",
"group": "Mode",
"importance": "MEDIUM",
"name": "timestamp.column.name",
"order": 3,
"required": false,
"type": "STRING",
"width": "MEDIUM"
},
<more stuff>
我们要求REST API验证一个连接器的配置,并向它发送了一个只有类名的配置(这是必要的最低配置)。此外,作为一个响应,我们得到了所有可用配置的JSON定义。考虑到这些信息,现在是时候创建和配置我们的JDBC连接器了:现在我们需要加载这些连接器。创建一个目录,比如/opt/connectors,并更新config/connect-distributed.properties以包括plugin.path=/opt/connectors。
echo '{"name":"mysql-login-connector", "config":{"connector.class":"JdbcSource-
Connector","connection.url":"jdbc:mysql://127.0.0.1:3306/test?
user=root","mode":"timestamp","table.whitelist":"login","vali-
date.non.null":false,"timestamp.column.name":"login_time","topic.pre-
fix":"mysql."}}' | curl -X POST -d @- http://localhost:8083/connectors --header
"content-Type:application/json"
{
"name": "mysql-login-connector",
"config": {
"connector.class": "JdbcSourceConnector",
"connection.url": "jdbc:mysql://127.0.0.1:3306/test?user=root",
"mode": "timestamp",
"table.whitelist": "login",
"validate.non.null": "false",
"timestamp.column.name": "login_time",
"topic.prefix": "mysql.",Now we need to load these connectors. Create a directory, such as /opt/connectors, and update config/connect-distributed.properties to include plugin.path=/opt/connectors.
"name": "mysql-login-connector"
},
"tasks": []
}
让我们通过从mysql.login主题读取数据来确保它的工作。
gwen$ bin/kafka-console-consumer.sh --bootstrap-server=localhost:9092 --topic
mysql.login --from-beginning
一旦连接器运行,如果你在登录表中插入额外的行,你
应该立即看到它们反映在mysql.login主题中。
现在我们需要加载这些连接器。创建一个目录,比如/opt/connectors,并更新config/connect-distributed.properties以包括plugin.path=/opt/connectors。
结语。
总之,在这篇博客中,我们看到了一个Kafka连接的例子,我们把一个MySQL表,流到一个Kafka主题,然后从那里加载到Elasticsearch并对其内容进行索引。
更多内容,你可以参考Kafka文档:kafka.apache.org/documentati…
关于更多的技术博客,你可以参考knoldus博客:https://blog.knoldus.com/