Oracle GoldenGate的使用——在安裝了kafka的目標端進行配置並測試實現Oracle數據同步至kafka

之前我已經安裝好了目標端的Oracle GoldenGate for Big Data。可以看這篇博客:Oracle Golden Gate(OGG)學習——目標端安裝Big Data

Linux系統中先進入到OGG安裝的目錄,使用 ggsci 打開控制程序:

1、配置mgr進程

GGSCI > edit params mgr

目標端mgr進程配置信息:

PORT 7809
DYNAMICPORTLIST 7810-7860
AUTORESTART ER *, RETRIES 3, WAITMINUTES 5
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 30
lagreporthours 1
laginfominutes 30
lagcriticalminutes 60
ACCESSRULE, PROG SERVER, ALLOW;    Or  ACCESSRULE, PROG *, IPADDR 192.168.129.161, ALLOW;

2、配置checkpoint

GGSCI > edit param ./GLOBALS

CHECKPOINTTABLE ogg_student.checkpoint

3、配置replicate進程

先將之前 Oracle GoldenGate的使用——在Windows源端增加配置管理、抽取、投遞進程並啓動測試  博客中 生成的映射文件 ogg.student 複製到我在目標端安裝Oracle GoldenGate for Big Data的 /ogg_bigdata/dirdef 路徑下:


 

GGSCI > edit param rekafka

REPLICAT rekafka
sourcedefs /ogg_bigdata/dirdef/ogg.student
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props
REPORTCOUNT EVERY 1 MINUTES, RATE 
GROUPTRANSOPS 10000
MAP ogg.student, TARGET ogg.student;

參數說明:

  • REPLICATE rekafka 爲rep進程名稱;
  • sourcedefs 爲之前在源服務器上做的表映射文件;
  • TARGETDB LIBFILE 爲定義kafka一些適配性的庫文件以及配置文件,配置文件位於OGG主目錄下的dirprmfka.props;
  • REPORTCOUNT即複製任務的報告生成頻率;
  • GROUPTRANSOPS爲以事務傳輸時,事務合併的單位,減少IO操作;
  • MAP即源端與目標端的映射關係。

其中TARGETDB LIBFILE參數中的 dirprm 路徑下面並沒有 kafka.props 文件,我們可以到 /ogg_bigdata/AdapterExamples/big-data/kafka 路徑下找到這個文件:


複製到dirprm路徑下即可:

> cp ./kafka.props /ogg_bigdata/dirprm/

4、配置kafka.props和custom_kafka_producer.properties

A.kafka.props文件內容

gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties
gg.handler.kafkahandler.topicMappingTemplate=stu_ogg
gg.handler.kafkahandler.format=json
gg.handler.kafkahandler.mode=op
gg.classpath=dirprm/:/opt/cloudera/parcels/KAFKA-4.1.0-1.4.1.0.p0.4/lib/kafka/libs/*:/ogg_bigdata/:/ogg_bigdata/lib/*


參數說明:

  • gg.handlerlist :handler類型。
  • gg.handler.kafkahandler.KafkaProducerConfigFile :kafka相關配置文件。
  • gg.handler.kafkahandler.topicMappingTemplate :kafka的topic名稱,無需手動創建。
  • gg.handler.kafkahandler.SchemaTopicName :主題名稱將在其中傳遞架構數據。如果未設置此屬性,則不會傳播架構。模式將僅針對Avro格式化程序傳播。
  • gg.handler.kafkahandler.format :傳輸文件的格式,支持json,xml,avro等。
  • gg.handler.kafkahandler.mode :OGG for Big Data中傳輸模式,即op爲一次SQL傳輸一次,tx爲一次事務傳輸一次。
  • gg.classpath :配置kafka和ogg的libs位置,用來讀取相關的jar包。

注意:
a、gg.classpath配置kafka和ogg的libs位置,不然啓動的時候讀取不到相關jar包,會報錯。
b、網上參考說需要其中四個jar包:kafka-clients-2.2.1-kafka-4.1.0.jar , lz4-1.5.0.jar , slf4j-api-1.7.25.jar , snappy-java-1.1.7.2jar。可以將這幾個jar包複製到某一路徑下,然後classpath指向這個路徑即可。
c、我將gg.handler.kafkahandler.SchemaTopicName參數刪了,因爲使用的是json格式,不是Avro。

B.custom_kafka_producer.properties文件內容

bootstrap.servers=cluster2-4:9092
acks=1
compression.type=gzip
reconnect.backoff.ms=1000
value.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer
batch.size=102400
linger.ms=10000

參數說明:

  • bootstrap.servers :kafkabroker的地址
  • compression.type :壓縮類型
  • reconnect.backoff.ms :重連延時

詳細參考此文檔:
docs.oracle.com/goldengate

5、添加trail文件到replicate進程

add replicat rekafka exttrail /ogg_bigdata/dirdat/to,checkpointtable ogg_student.checkpoint

6、啓動進程

A.源端啓動所有部署的進程,使用以下指令在源端的ggsci中啓動進程

start mgr
start extkafka
start pukafka

這裏之前我啓動extkafka時被拒絕了:

後面查看了安裝ogg目錄下的ggserr.log日誌文件,發現報了這個錯誤:
The trail 'C:/OGG/dirdat/to' is not assigned to extract 'EXTKAFKA'. Assign the trail to the extract with the command "ADD EXTTRAIL/RMTTRAIL C:/OGG/dirdat/to, EXTRACT EXTKAFKA".
解決辦法:
將之前我添加trail文件的定義與extract進程綁定時的指令 :add exttrail C:\OGG\dirdat\to,extract extkafka 中的 \ 改爲 / 即可。

然後啓動成功:

B.目標端啓動部署的進程,使用以下指令字啊目標端的ggsci中啓動進程

start mgr
start rekafka

若有問題(窗口閃退,報錯啓動失敗),可以查看系統日誌:

1. windows下:

ogg目錄下的ggserr.log日誌文件,也可以在ggsci下使用下列命令查看:
view report extkafka --這個取決於你的名稱是什麼,比如是extkafka

2. linux下:

與windows相同,但是對於kafka報錯可以去 ./dirrpt/XXXXX_info_log4j.log中查看。
啓動成功則使用info all查看,進程全部正在運行:

7、數據測試

連接Oracle,可以插入或者修改數據,但是注意一定記得commit提交,纔可以提交併監測到數據變化。可以發現源端和目標端的dirdat文件夾下生成了to000000的文件。

這裏要注意,前面的服務器名要跟之前配置文件裏寫的一樣,用localhost則會報錯:

>  kafka-console-consumer --bootstrap-server localhost:9092 --topic student --from-beginning

會報錯:
........
20/06/11 23:26:41 WARN clients.NetworkClient: [Consumer clientId=consumer-1, groupId=console-consumer-28300] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
........

解決辦法——啓動正確的消費者指令:

kafka-console-consumer --bootstrap-server cluster2-4:9092 --topic student --from-beginning

kafka接受到數據則測試成功。

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