kafka-connect-oracle 連接器安裝部署

由於業務需求,需要從Oracle數據庫中獲取某表的修改日誌信息。這裏講解一下在GitHub中kafka-connect-oracle 連接器的部署。

1、GitHub中下載項目

kafka-connect-oracle

2、添加配置

a.數據庫必須處於archivelog模式:

    sqlplus / as sysdba   //sqlplus sys/sys as sysdba;
    SQL>shutdown immediate
    SQL>startup mount
    SQL>alter database archivelog;
    SQL>alter database open;

b.啓用補充日誌記錄:

    sqlplus / as sysdba    
    SQL>alter database add supplemental log data (all) columns;

c.爲了成功執行連接器,必須使用特權Oracle用戶啓動連接器。如果給定的用戶具有DBA角色,則可以跳過此步驟。否則,需要執行以下腳本來創建特權用戶:

    create role logmnr_role;
    grant create session to logmnr_role;
    grant  execute_catalog_role,select any transaction ,select any dictionary to logmnr_role;
    create user kafka identified by kafkapass;
    grant  logmnr_role to kafka;
    alter user kafka quota unlimited on users;

3、修改配置文件

配置文件在此路徑下:kafka-connect-oracle-master.config.OracleSourceConnector.properties 

可以看到其中的默認配置信息:

其中參數介紹:

名稱

 

類型

描述

name

String

連接器名稱

connector.class

String

此連接器的Java類的名稱。

db.name.alias

String

數據庫的標識符名稱(例如Test,Dev,Prod)或用於標識數據庫的特定名稱。此名稱將用作主題和架構名稱的標頭。

task.max

Integer

創建的最大任務數。此連接器使用單個任務。

topic

String

消息將被寫入的主題的名稱。如果設置了一個值,則所有消息都將被寫入此聲明的主題(如果未設置),則將爲每個數據庫表動態創建一個主題。

db.name

String

要連接的數據庫的服務名稱或sid。通常使用數據庫服務名稱。

db.hostname

String

Oracle數據庫服務器的IP地址或主機名。

db.port

Integer

Oracle數據庫服務器的端口號。

db.user

String

用於連接到數據庫以啓動和執行logminer的數據庫用戶的名稱。該用戶必須提供上述必要的特權。

db.user.password

String

數據庫用戶密碼。

db.fetch.size

Integer

此配置屬性設置Oracle行提取大小值。

table.whitelist

String

用逗號分隔的將要捕獲的數據庫模式或表名稱的列表。
對於所有架構捕獲<SCHEMA_NAME>。
對於表捕獲<SCHEMA_NAME>。必須指定<TABLE_NAME>

parse.dml.data

Boolean

如果爲true,則捕獲的sql DML語句將解析爲字段和值;如果爲false,則僅發佈sql DML語句。

reset.offset

Boolean

如果爲true,則在連接器啓動時將偏移值設置爲數據庫的當前SCN。如果爲false,則連接器將從上一個偏移值開始。

start.scn

Long

如果設置爲,則將偏移值設置爲該指定值,並且logminer將從此SCN啓動。如果連接器希望從所需的SCN啓動,則可以使用此屬性。

multitenant

Boolean

如果爲true,則啓用多租戶支持。如果爲false,將使用單實例配置。

table.blacklist

String

用逗號分隔的數據庫模式或表名列表,將不會捕獲。
對於所有架構捕獲<SCHEMA_NAME>。
對於表捕獲<SCHEMA_NAME>。必須指定<TABLE_NAME>

修改前(默認):
name=oracle-logminer-connector
connector.class=com.ecer.kafka.connect.oracle.OracleSourceConnector
db.name.alias=test
tasks.max=1
topic=cdctest
db.name=testdb
db.hostname=10.1.X.X
db.port=1521
db.user=kminer
db.user.password=kminerpass
db.fetch.size=1
table.whitelist=TEST.*,TEST2.TABLE2
parse.dml.data=true
reset.offset=true
start.scn=
multitenant=false

修改後:
name=oracle-logminer-connector
connector.class=com.ecer.kafka.connect.oracle.OracleSourceConnector
db.name.alias=sc
tasks.max=1
topic=student
db.name=scott
db.hostname=192.168.129.156
db.port=1521
db.user=kafka
db.user.password=kafkapass
db.fetch.size=1
table.whitelist=SC.student
parse.dml.data=true
reset.offset=false
multitenant=false

4、保存後建立與運行

A.右鍵項目名後 Run as->Maven clean,然後再Run as->Maven install

B.產生jar包:kafka-connect-oracle-1.0.jar 和lib中的ojdbc7.jar 複製到KAFKA_HOME / lib文件夾中。

    a.先拷貝到一個指定的路徑下:/root/kafka---oracle

    b.在kafka的conf.dist路徑下找到connect-distributed.properties文件並修改其中的plugin.path:
plugin.path=/root/kafka---oracle

也建議一些連接器,轉換器的所需的jar包可以放在這裏指定路徑

eg:如果CONFLUENT平臺用於kafka集羣,請將ojdbc7.jar和kafka-connect-oracle-1.0.jar複製到$ CONFLUENT_HOME / share / java / kafka-connect-jdbc文件夾。

C.將config / OracleSourceConnector.properties文件複製到$ KAFKA_HOME / config中。我這裏的kafka是CDH中安裝的,所以路徑是:/opt/cloudera/parcels/KAFKA-4.1.0-1.4.1.0.p0.4/etc/kafka/conf.dist

D.儘量不改動其中的文件,複製connect-distributed.properties爲connect-distributed-Oracle.properties 並對其修改


其中配置信息:

bootstrap.servers=localhost:9092

group.id=connect-cluster

key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter

key.converter.schemas.enable=true
value.converter.schemas.enable=true

offset.storage.topic=connect-offsets
offset.storage.replication.factor=1

config.storage.topic=connect-configs
config.storage.replication.factor=1

status.storage.topic=connect-status
status.storage.replication.factor=1

offset.flush.interval.ms=10000

plugin.path=/root/kafka---oracle

E.啓動連接器

CDH中kafka的connect-distributed.sh存在目錄:/opt/cloudera/parcels/KAFKA-4.1.0-1.4.1.0.p0.4/lib/kafka/bin
CDH中kafka的connect-distributed.properties存在目錄:/opt/cloudera/parcels/KAFKA-4.1.0-1.4.1.0.p0.4/etc/kafka/conf.dist

> cd /opt/cloudera/parcels/KAFKA-4.1.0-1.4.1.0.p0.4
> ./lib/kafka/bin/connect-distributed.sh ./etc/kafka/conf.dist/connect-distributed-Oracle.properties ./etc/kafka/conf.dist/OracleSourceConnector.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)
…………

解決辦法在此博客:使用kafka報錯log4j:ERROR Could not read configuration file from URL

注意:這裏的kafka是CDH創建的,所以後面設計到的sh或者properties不選擇connect-standalone,而是connect-distributed!!!主要的區別就是 connect-standalone 是對單節點的kafka進行操作,而connect-distributed是對集羣中的kafka進行操作。

F.執行成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章