OGG-Postgres实时同步到Kafka

(一)数据同步信息

|-------|-----------------|-----------|------------------------------------------------------|
| 名称 | 源端 | 名称 | 目标端 |
| 数据库类型 | Postgresql 12.4 | 组件类型 | Kafka |
| IP地址 | 20.2.127.23 | Broker地址 | 20.2.125.52:9092, 20.2.127.23:9092, 20.2.127.24:9092 |
| 端口 | 5432 | 端口 | 9092 |
| 数据库 | testpdb | Zookeeper | Hadoop01:2181,hadoop02:2181,hadoop03:2181 |
| 用户 | ogguser | | |
| 密码 | ogguserP2021 | | |
| 表名 | tb01 | Topic | oggtb01 |

postgreSQL数据库配置:

vi postgresql.conf

wal_level = logical # minimal, replica, or logical

(change requires restart)

max_wal_senders = 10 # max number of walsender processes

(change requires restart)

max_replication_slots = 10 # max number of replication slots

(change requires restart)

修改后需要重启数据库。

(二)OGG安装信息

|------------|-------------------------------------------|----------------------------------------|
| 名称 | 源端OGG | 目标端OGG |
| OGG版本 | 213000_ggs_Linux_x64_PostgreSQL_64bit.zip | 214000_ggs_Linux_x64_BigData_64bit.zip |
| 安装服务器IP | 20.2.125.52(hadoop03) | 20.2.125.52(hadoop03) |
| OGG_HOME | /data/ogg_pg/ | /data/ogg_bigdata/ |
| MGR进程 | mgr | mgr |
| EXTRACT进程 | pgext2 | --- |
| PUMP进程 | pgpump2 | --- |
| REPLICAT进程 | --- | mqkafka2 |

(三)前提准备

1.安装Java1.8及以上版本

2.设置环境变量

编辑变量:

vi /etc/profile

export LD_LIBRARY_PATH=/data/ogg_pg/lib:/data/ogg_mysql/lib:/data/ogg_bigdata/lib:$LD_LIBRARY_PATH

alias pg_ggsci='cd /data/ogg_pg; ./ggsci'

alias mysql_ggsci='cd /data/ogg_mysql; ./ggsci'

alias bigdata_ggsci='cd /data/ogg_bigdata; ./ggsci'

使环境变量生效

source /etc/profile

3.在PostgreSQL中创建库表

--创建数据库testpdb

create database testpdb ;

--进入testpdb数据库

\c testpdb

--创建表tb01

create table tb01(id int not null, name varchar(16), ts timestamp , primary key(id) );

4.在Kafka中创建Topic

cd /usr/local/kafka/bin

--创建一个名称为oggtb01的Topic,4个分区,并且复制因子为3:

./kafka-topics.sh --create --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181 --replication-factor 3 --partitions 3 --topic oggtb01

--查看所有的topic

./kafka-topics.sh --describe --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181

(四)OGG源端配置

1.启动PG的ggsci

pg_ggsci

2.PG 创建目录

create subdirs

3.配置并启动MGR

--编辑MGR

edit param mgr

port 2031

dynamicportlist 2032-2040

purgeoldextracts ./dirdat/*, usecheckpoints,minkeephours 24

AUTORESTART ER *, RETRIES 3, WAITMINUTES 2,RESETMINUTES 10

--查看MGR配置参数

view params mgr

--启动MGR

start mgr

--查看MGR状态

Info mgr

4.登录PG数据库

cd /data/ogg_pg/

编辑 odbc.ini

[ODBC Data Sources]

PGDSN=DataDirect 12.4 PostgreSQL Wire Protocol

postgres=DataDirect 12.4 PostgreSQL Wire Protocol

scott=DataDirect 12.4 PostgreSQL Wire Protocol

[ODBC]

IANAAppCodePage=106

InstallDir=/data/ogg_pg

[TESTPDB]

Driver=/data/ogg_pg/lib/GGpsql25.so

Description=DataDirect 12.4 PostgreSQL Wire Protocol

Database=testpdb

HostName=20.2.127.23

PortNumber=5432

LogonID=ogguser

Password=ogguserP2021

TransactionErrorBehavior=2

--查看odbc.ini配置

shell cat odbc.ini

将如下一行添加到/etc/profile

export ODBCINI=/data/ogg_pg/odbc.ini

使环境变量生效

source /etc/profile

--登录

dblogin sourcedb testpdb, userid ogguser, password ogguserP2021

如果登录时报错,说明ODBCINI变量没有配置或者没有生效。

5.配置抽取进程

--注册抽取

register extract pgext2

--增加抽取进程日志

add ext pgext2, tranlog , begin now

add exttrail ./dirdat/g1, ext pgext2

--编辑抽取参数

edit param pgext2

extract pgext2

setenv(PGCLIENTENCODING = "UTF8")

setenv(ODBCINI="/data/ogg_pg/odbc.ini" )

sourcedb testpdb, userid ogguser, password ogguserP2021

exttrail ./dirdat/g1

discardfile ./dirrpt/pgext2.dsc

cachemgr cachesize 1G

container mem_limit 8G

table public.tb01;

--查看抽取参数

view param pgext2

--启动抽取进程

start pgext2

--查看进程状态

info pgext2

6.配置投递进程

--编辑投递参数

edit param pgpump2

extract pgpump2

rmthost 20.2.125.52, mgrport 6809

rmttrail ./dirdat/g1

passthru

cachemgr cachesize 1G

container mem_limit 8G

table public.tb01;

--查看配置投递参数

view param pgpump2

--添加投递进程日志

add extract pgpump2, exttrailsource ./dirdat/g1

add rmttrail ./dirdat/g1, extract pgpump2

--启动投递进程

start pgpump2

--查看投递进程状态

Info pgpump2

7.测试抽取和投递 进程

(1)登录PG数据库,插入数据

--创建sequence

create sequence seq01 increment by 1 start 1;

--以下语句手动执行,可以多执行几次。

insert into tb01

select

nextval('seq01'),

array_to_string(array(select substring('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' FROM (ceil(random()*62))::int FOR 1) FROM generate_series(1, 16)), ''),

now();

(2)登录源端OGG,查看抽取和投递统计信息

--OGG查看统计信息

stats pgext2, total

--查看投递统计信息

stats pgpump2,total

(五)OGG目标端配置

1.启动 Bigdata 的ggsci

bigdata_ggsci

2.创建目录

create subdirs

3.配置kafka相关参数

1) 配置custom_kafka_producer.properties

在dirprm目录下编辑文件custom_kafka_producer.properties,如果没有可以新建一个。

bootstrap.servers=hadoop01:9092,hadoop02:9092,hadoop03: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

2) 配置kafka.props

kafka.props用户配置写入Kafka的topic、数据格式、日志打印等等。这里只给出一个可用的简单示例,更多配置可参考OGG for bigdata 官方文档。

在dirrpm目录下编辑文件kafka.props,如果没有可以新建一个。

gg.handlerlist=kafkahandler

gg.handler.kafkahandler.type=kafka

gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties

#gg.handler.kafkahandler.TopicName=oggtb01

gg.handler.kafkahandler.topicMappingTemplate=oggtb01

gg.handler.kafkahandler.format=avro_op

gg.handler.kafkahandler.format=delimitedtext

gg.handler.kafkahandler.format.fieldDelimiter=|

gg.handler.kafkahandler.SchemaTopicName=oggtb01

gg.handler.kafkahandler.BlockingSend=false

gg.handler.kafkahandler.includeTokens=false

gg.handler.kafkahandler.mode=op

goldengate.userexit.timestamp=utc

goldengate.userexit.writers=javawriter

javawriter.stats.display=TRUE

javawriter.stats.full=TRUE

gg.log=log4j

gg.log.level=INFO

gg.report.time=30sec

gg.classpath=/usr/local/kafka/libs/*

javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar

4.配置并启动MGR

edit param mgr

PORT 6809

DYNAMICPORTLIST 6810-6909

AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3

PURGEOLDEXTRACTS ./dirdat/*,USECHECKPOINTS, MINKEEPDAYS 3

--查看MGR参数配置

view param mgr

--启动MGR

start mgr

--查看MGR状态

Info mgr

5.回放(Replicat)进程配置

--添加/编辑回放进程配置文件

edit params mqkafka2

这里mqkafka为replicat进程名称,用户可任意定义。

REPLICAT mqkafka2

TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props

REPORTCOUNT EVERY 1 MINUTES, RATE

GROUPTRANSOPS 10000

cachemgr cachesize 1G

##container mem_limit 8G

MAP public.tb01, TARGET public.tb01;

--添加进程

add replicat mqkafka2, exttrail ./dirdat/g1

--启动mqkafka2

start mqkafka2

--查看回放进程信息

Info mqkafka2

--查看回放进程统计信息

stats mqkafka2,total

(六)测试验证

(1)PostgreSQL中插入数据

--登录PostgreSQL数据库

psql

--进入testpdb数据库

\c testpdb

--插入数据

insert into tb01 values(2001,'lgb',now()),(2002,'tom',now()),(2003,'alice',now());

(2)PostgreSQL中更新数据

--更新tb01表中的时间

update tb01 set ts = now() where id < 2000 ;

--查询变更后的时间

select * from tb01 ;

(3)PostgreSQL中删除数据

--删除表中数据

delete from tb01 where id > 2001;

--查询表中数据

select * from tb01 ;

(4)Kafka查看消费消息

--启动Consumer,并订阅我们上面创建的Topic中生产的消息:

./kafka-console-consumer.sh --bootstrap-server hadoop03:9092 --topic oggtb01 ;

(七)常用命令总结

--查看所有OGG进程

info all

--查看某个OGG进程

info 进程名

info 进程名 detail

--管理OGG进程

start/stop/delete 进程名

--查看进程日志报告

view report 进程名

--修改进程参数

edit params 进程名

--修改全局参数

edit params ./GLOBAL

--查看统计信息,列出处理的所有记录数

stats 进程名,total

--查看详细处理过的事务记录

info 进程名 showch

--查看进程中最长的10个交易

send extract 进程名 ,showtrans thread 1 count 10

--查看当前GoldenGate环境信息

show

--历史命令

history

--执行本地shell

shell ls

--查看告警日志信息

view ggsevt

--查看延时,以及文件抽取应用情况

lag 进程名

相关推荐
码上一元2 小时前
消息队列:如何确保消息不会丢失?
kafka·消息队列·rocketmq
mqiqe2 小时前
PostgreSQL 基础操作
数据库·postgresql·oracle
懒洋洋的华36910 小时前
消息队列-Kafka(概念篇)
分布式·中间件·kafka
happycao12315 小时前
kafka之路-01从零搭建环境到SpringBoot集成
kafka
happycao12315 小时前
kafka 配置自定义序列化方式
kafka
happycao12315 小时前
kafka Partition使用详解
kafka
qingcyb20 小时前
下载Kafka 3.0.0教程
分布式·kafka
Z_W_H_1 天前
【PostgreSQL】安装及使用(Navicat/Arcgis),连接(C#)
数据库·postgresql
huisheng_qaq1 天前
【kafka-03】springboot整合kafka以及核心参数详解
spring boot·kafka·消息队列·topic·partition·kafka底层原理
晚枫20001 天前
kafka发送事件的几种方式
spring boot·分布式·docker·容器·kafka·intellij-idea·linq