这里前提条件是已经部署安装了一个kafka连接器。我之前写过一篇关于 kafka-connect-oracle 连接器例子部署的博客:连接器部署 最后编译执行得到了一个jar包,放在指定路径,然后这篇博客总结一下如何启动一个kafka连接器。(这个方法不仅只适用此连连接器)
1、启动Zookeeper与Kafka
这里需要用到kafka中的topic,所以现在kafka中创建student的主题: kafka常用指令
kafka-topics --zookeeper 192.168.129.228:2181/kafka --create -replication-factor 1 --partitions 3 --topic student
2、产生jar包复制到指定路径
之前编译执行产生的 kafka-connect-oracle-1.0.jar 和其驱动程序 ojdbc7.jar 复制到一个指定的路径下: /root/kafka---oracle
并且将配置文件导入到服务器的 **/opt/cloudera/parcels/KAFKA/etc/kafka/conf.dist 路径下,其中再找到 connect-distributed.properties 文件并修改其中的plugin.path: plugin.path=/root/kafka---oracle
注意: 也建议一些连接器,转换器的所需的jar包可以放在这里指定路径。
3、修改连接器的配置信息
我们先看之前那个项目给我们的样例 OracleSourceConnector.properties 配置信息:
name=oracle-logminer-connector
connector.class=com.ecer.kafka.connect.oracle.OracleSourceConnector
db.name.alias=orcl
tasks.max=1
topic=student
db.name=orcl
db.hostname=192.168.129.156
db.port=1521
db.user=kafka
db.user.password=kafkapass
db.fetch.size=1
parse.dml.data=true
reset.offset=false
multitenant=false
table.whitelist=KAFKA.student
table.blacklist=
start.scn=
这里我们需要先看一下官方的开发文档: 开发文档 其中提到————>>
REST API不仅供用户用来监视/管理Kafka Connect。它也用于Kafka Connect跨集群通信。在跟随者节点REST API上收到的请求将转发到领导者节点REST API。在情况下,URI下被给予宿主可达是从它侦听的URI,配置选项不同rest.advertised.host.name,rest.advertised.port并rest.advertised.listener 可以用来改变将由跟随节点使用与前导连接URI。当同时使用HTTP和HTTPS侦听器时,该rest.advertised.listener选项还可用于定义哪个侦听器将用于跨集群通信。当使用HTTPS在节点之间进行通信时,将使用相同ssl.*或listeners.https选项来配置HTTPS客户端。
以下是当前支持的REST API端点:
GET /connectors | 返回活动连接器的列表 |
POST /connectors | 创建一个新的连接器;请求主体应为JSON对象,其中包含字符串name字段和config带有连接器配置参数的对象字段 |
GET /connectors/{name} | 获取有关特定连接器的信息 |
GET /connectors/{name}/config | 获取特定连接器的配置参数 |
PUT /connectors/{name}/config | 更新特定连接器的配置参数 |
GET /connectors/{name}/status | 获取连接器的当前状态,包括连接器正在运行,发生故障,已暂停等情况 |
GET /connectors/{name}/tasks | 获取连接器当前正在运行的任务列表 |
GET /connectors/{name}/tasks/{taskid}/status | 获取任务的当前状态,包括它是否正在运行,失败 |
PUT /connectors/{name}/pause | 暂停连接器及其任务,这将停止消息处理,直到恢复连接器为止 |
PUT /connectors/{name}/resume | 恢复已暂停的连接器(如果连接器未暂停,则不执行任何操作) |
POST /connectors/{name}/restart | 重新启动连接器(通常是因为它失败了) |
POST /connectors/{name}/tasks/{taskId}/restart | 重新启动单个任务(通常是因为它失败了) |
DELETE /connectors/{name} | 删除连接器,暂停所有任务并删除其配置 |
GET /connectors/{name}/topics | 获取自创建连接器以来或自发出重置其活动主题集的请求以来特定连接器正在使用的主题集 |
PUT /connectors/{name}/topics/reset | 发送请求以清空连接器的活动主题集 |
通过第二行的 POST /connectors 得知我们要讲这个配置文件转换为json格式,后面我们也通过这个指令启动连接器,如下:
OracleSourceConnector.json 文件:
{
"name":"oracle-logminer-connector",
"config":{
"connector.class":"com.ecer.kafka.connect.oracle.OracleSourceConnector",
"db.name.alias":"orcl",
"tasks.max":"1",
"topic":"student",
"db.name":"orcl",
"db.hostname":"192.168.129.156",
"db.port":"1521",
"db.user":"kafka",
"db.user.password":"kafkapass",
"db.fetch.size":"1",
"parse.dml.data":"true",
"reset.offset":"false",
"multitenant":"false",
"table.whitelist":"KAFKA.student",
"table.blacklist":"",
"start.scn":""
}
}
4、启动Kafka连接器
cd /opt/cloudera/parcels/KAFKA
./lib/kafka/bin/connect-distributed.sh -daemon etc/kafka/conf.dist/connect-distributed-Oracle.properties
可能会报错:
…………
log4j:ERROR Could not read configuration file from URL [file:./lib/kafka/bin/../config/connect-log4j.properties].
java.io.FileNotFoundException: ./lib/kafka/bin/../config/connect-log4j.properties (No such file or directory)
…………
解决办法在此博客: https://blog.csdn.net/JJBOOM425/article/details/106126914
5. 启动之前部署的连接器
(1)使用上面创建好的json配置文件: OracleSourceConnector.json
(2)启动 test-connector 监视MySQL数据库 :
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" http://192.168.129.228:8083/connectors/ -d @./etc/kafka/conf.dist/OracleSourceConnector.json
(3)如果启动成功,则可以查看创建的connector列表:
curl -X GET http://192.168.129.228:8083/connectors
常用指令拓展:
A、查看创建的connector列表
curl -X GET http://192.168.129.228:8083/connectors
B、查看创建的connector状态
curl -X GET http://192.168.129.228:8083/connectors/oracle-logminer-connector/status
C、查看创建的connector配置
curl -X GET http://192.168.129.228:8083/connectors/oracle-logminer-connector/config
D、删除connector
curl -X DELETE http://192.168.129.228:8083/connectors/oracle-logminer-connector
6、问题解决
注意这里我查看了创建的connector的状态,其中报了错,说找不到驱动程序。
这个解决办法也很简单,我看了在connect-distributed.properties的plugin.path路径,在此路径下面新建一个文件夹,然后把jar包放进去就可以了。
然后再重新执行,再看状态就可以发现成功执行了。