tidb Binlog 整库同步到 hive

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

tidb Binlog 整库同步到 hive

Qishang Zhong
大家好 .
我现在有一个场景需要调研。
背景:对整库 Tidb binlog 做实时落
Hive,好几个库的binlog发送到一个Topic或者几个Topic里面,一个Topic里面有复数个表的binlog。

1. 好像 Flink SQL 里面只能一个数据源 kafka 到一张Hive表,一个Topic是否可以根据解析的表不同插入到不同的Hive表吗 ?
我看了一些邮件好像说不可以的,在问一下。
2. 或者有什么好的解决方式吗?因为数据量都不是很大,表比较多,每个表都要维护一个任务的话,代价比较大。

感谢!
Reply | Threaded
Open this post in threaded view
|

Re: tidb Binlog 整库同步到 hive

Leonard Xu
Hi, qishang

> 1. 好像 Flink SQL 里面只能一个数据源 kafka 到一张Hive表,一个Topic是否可以根据解析的表不同插入到不同的Hive表吗 ?
> 我看了一些邮件好像说不可以的,在问一下。
在一个SQL作业中是不行的,因为SQL是强依赖Schema的,schema需要事先声明。

> 2. 或者有什么好的解决方式吗?因为数据量都不是很大,表比较多,每个表都要维护一个任务的话,代价比较大。

 除了多个sql作业的方式,如果需要在一个SQL作业中可以试试在一个作业里把所有表的binlog 格式统一用一个字段(如string) 接入,然后写针对每个表的schema写一个udtf解析对应的数据,最后多路输出到hive的不同表。

祝好
Leonard
Reply | Threaded
Open this post in threaded view
|

Re: tidb Binlog 整库同步到 hive

Qishang Zhong
Hi Leonard.
> 除了多个sql作业的方式,如果需要在一个SQL作业中可以试试在一个作业里把所有表的binlog 格式统一用一个字段(如string)
接入,然后写针对每个表的schema写一个udtf解析对应的数据,最后多路输出到hive的不同表。
如果不限定SQL作业的话,用DataSteam API的话是不是可以实现这样的功能。

多路输出是个动态的,因为是整库的binlog ,不确定库中是否有新增表,作业要触发hive里面去创建表的动作。hive catalog create
table 是否可以在运行中来调用吗?

程序启动之后生成的jobgraph运行中是不是不可以调整的?如果可以的话,是否有类似的案例可以参考。


Leonard Xu <[hidden email]> 于2020年8月28日周五 上午9:30写道:

> Hi, qishang
>
> > 1. 好像 Flink SQL 里面只能一个数据源 kafka 到一张Hive表,一个Topic是否可以根据解析的表不同插入到不同的Hive表吗
> ?
> > 我看了一些邮件好像说不可以的,在问一下。
> 在一个SQL作业中是不行的,因为SQL是强依赖Schema的,schema需要事先声明。
>
> > 2. 或者有什么好的解决方式吗?因为数据量都不是很大,表比较多,每个表都要维护一个任务的话,代价比较大。
>
>  除了多个sql作业的方式,如果需要在一个SQL作业中可以试试在一个作业里把所有表的binlog 格式统一用一个字段(如string)
> 接入,然后写针对每个表的schema写一个udtf解析对应的数据,最后多路输出到hive的不同表。
>
> 祝好
> Leonard
Reply | Threaded
Open this post in threaded view
|

Re: tidb Binlog 整库同步到 hive

Leonard Xu
Hi

> 多路输出是个动态的,因为是整库的binlog ,不确定库中是否有新增表,作业要触发hive里面去创建表的动作。hive catalog create
> table 是否可以在运行中来调用吗?
> 程序启动之后生成的jobgraph运行中是不是不可以调整的?如果可以的话,是否有类似的案例可以参考。

用dataStream是会更灵活些,思路也差不多,在运行中可以调用的建表动作的,但是运行的拓扑是不可以动态调整的,不管DataStream 还是 SQL 的拓扑。

祝好
Leonard

Reply | Threaded
Open this post in threaded view
|

Re: tidb Binlog 整库同步到 hive

Rui Li
Hi,

我理解也是如果多路输出需要能动态适配新表的话只能用DataStream自己实现了,具体写表的时候可以试试看能不能复用hive
connector里现有的sink。

On Fri, Aug 28, 2020 at 12:15 PM Leonard Xu <[hidden email]> wrote:

> Hi
>
> > 多路输出是个动态的,因为是整库的binlog ,不确定库中是否有新增表,作业要触发hive里面去创建表的动作。hive catalog
> create
> > table 是否可以在运行中来调用吗?
> > 程序启动之后生成的jobgraph运行中是不是不可以调整的?如果可以的话,是否有类似的案例可以参考。
>
> 用dataStream是会更灵活些,思路也差不多,在运行中可以调用的建表动作的,但是运行的拓扑是不可以动态调整的,不管DataStream 还是
> SQL 的拓扑。
>
> 祝好
> Leonard
>
>

--
Best regards!
Rui Li
Reply | Threaded
Open this post in threaded view
|

Re: tidb Binlog 整库同步到 hive

Qishang Zhong
Hi Rui Li.

> 我理解也是如果多路输出需要能动态适配新表的话只能用DataStream自己实现了
这个实现有啥思路,能稍微详细说一下嘛? 是不是需要自己开发一个 Sink 来适配?

Rui Li <[hidden email]> 于2020年8月28日周五 下午1:47写道:

> Hi,
>
> 我理解也是如果多路输出需要能动态适配新表的话只能用DataStream自己实现了,具体写表的时候可以试试看能不能复用hive
> connector里现有的sink。
>
> On Fri, Aug 28, 2020 at 12:15 PM Leonard Xu <[hidden email]> wrote:
>
> > Hi
> >
> > > 多路输出是个动态的,因为是整库的binlog ,不确定库中是否有新增表,作业要触发hive里面去创建表的动作。hive catalog
> > create
> > > table 是否可以在运行中来调用吗?
> > > 程序启动之后生成的jobgraph运行中是不是不可以调整的?如果可以的话,是否有类似的案例可以参考。
> >
> > 用dataStream是会更灵活些,思路也差不多,在运行中可以调用的建表动作的,但是运行的拓扑是不可以动态调整的,不管DataStream 还是
> > SQL 的拓扑。
> >
> > 祝好
> > Leonard
> >
> >
>
> --
> Best regards!
> Rui Li
>
Reply | Threaded
Open this post in threaded view
|

Re: tidb Binlog 整库同步到 hive

Rui Li
是的,我觉得需要自己实现一个sink,检测到新增的表时需要通过catalog去hive里创建一下。有点像hive的dynamic
partitioning,只不过写的是多张表而不是多个partition。

On Fri, Aug 28, 2020 at 2:08 PM Qishang <[hidden email]> wrote:

> Hi Rui Li.
>
> > 我理解也是如果多路输出需要能动态适配新表的话只能用DataStream自己实现了
> 这个实现有啥思路,能稍微详细说一下嘛? 是不是需要自己开发一个 Sink 来适配?
>
> Rui Li <[hidden email]> 于2020年8月28日周五 下午1:47写道:
>
> > Hi,
> >
> > 我理解也是如果多路输出需要能动态适配新表的话只能用DataStream自己实现了,具体写表的时候可以试试看能不能复用hive
> > connector里现有的sink。
> >
> > On Fri, Aug 28, 2020 at 12:15 PM Leonard Xu <[hidden email]> wrote:
> >
> > > Hi
> > >
> > > > 多路输出是个动态的,因为是整库的binlog ,不确定库中是否有新增表,作业要触发hive里面去创建表的动作。hive catalog
> > > create
> > > > table 是否可以在运行中来调用吗?
> > > > 程序启动之后生成的jobgraph运行中是不是不可以调整的?如果可以的话,是否有类似的案例可以参考。
> > >
> > > 用dataStream是会更灵活些,思路也差不多,在运行中可以调用的建表动作的,但是运行的拓扑是不可以动态调整的,不管DataStream
> 还是
> > > SQL 的拓扑。
> > >
> > > 祝好
> > > Leonard
> > >
> > >
> >
> > --
> > Best regards!
> > Rui Li
> >
>


--
Best regards!
Rui Li