kafka适用哪些离线同步场景

一、源端为大量小文件,合并为一个大文件存储到hdfs

      a)为什么要把小文件合并为大文件

大量的小文件同步到hdfs,对namenode的压力非常大,生成环境是不会允许如此使用集群的。

       b)为什么选kafka

producer可以将文件内容转成消息发送到topic,相当于在数据传输过程对小文件进行了合并

       c)consumer将消息直接写到hdfs还是保存在本地,那个方式比较好?

实际上两种方式都可以,直接写到本地,速度最快,但是还需要将本地数据put到hdfs,操作起来简单,但比较繁琐,但相对来说效率最好;直接写到hdfs,由于consumer直接调用hdfs客户端,如果单行写效率很低,如果批量写效率有提升,但相对put命令还是要慢很多,而且复杂度一下就上来了,kafka出现异常、consumer写hdfs失败时该如何处理offset,这个问题很复杂。

 

Kafka同步效率优化:

kafka有consumer group的概念,消费者以组为单位消费topic里的消息,但是一个partition中的消息同时只能被consumer group里的一个consumer处理,最优设置为一个topic有多少个partition,对应的consumer group就配置多少个consumer,如果partition不变,且consumer个数大于等于partition数量的前提下,再增加consumer group的consumer个数,不会增加消费效率。

 

PS:

kafka作为一款消息分发框架,简单点说就是将源端数据按行分装成一个个单独的消息,一个一个的处理,效率肯定是不如输入输出流的,所有kafka适合处理实时、小批量或者小文件的离线场景,不适用于大文件的同步场景。

 

你可能感兴趣的:(Kafka,数据同步)