如何高效的将kafka中的数据(T/day)写入hdfs?

问题背景:

目前kafka中每天有10T数据左右,需要每天将这些数据写入hdfs中。每秒数据量量为10000/s条,每条数据10kB左右。

以做尝试:

1.使用logstash直接消费kafka中的数据,在output中写入hdfs中。结果:处理效率500/s。

2.使用logstash将数据写入本地磁盘,每个小时使用hadoop fs -put语句定时上传。每小时大概400G数据,勉强可以处理完,但后续若数据量继续变大,必然出现数据积压。

考虑将数据压缩后上传:

1.每小时上传数据前将数据压缩,测试lz4压缩效率为3g/min,gzip压缩效率为1g/min。明显压缩所花的时间足以上传所有数据了。

2.使用logstash在输出数据时使用流式压缩为gzip格式,logstash处理数据能力大幅降低为1000/s条。

请问各位大佬指点一下其他处理大数据量从kafka到hdfs的思路,不限以上提到的组件。本人大数据新手,感谢你的回答。

解决方案:
首先你要确定是上游kafka的数据输出太多还是下游hdfs写入能力太差造成的

  1. 如果kafka的数据输出太多,消费不过来,你可以通过增大分区,增加每个批次拉取量来解决
  2. 如果hdfs写入能力太差,可能考虑下多线程写入或者并发写入的问题了
    看了你使用logstash工具同步每秒500条感觉性能有点差,你看看logstash有没有增加poll的参数,设置多线程的参数之类的,
    我一般遇到这种场景都是使用streamsets工具的,上T级别数据量没压力,最近实现了Kafka同步到HBase的功能,你要感兴趣的话可以看看:
    https://blog.csdn.net/BlackArmand/article/details/118367522?spm=1001.2014.3001.5502

可以用flume作为kafka的消费者,再用flume来sink到hdfs,各种需求可以通过配置flume的配置文件来完成

可以使用hudi技术,将数据从Kafka经过hudi写入hdfs,这里可以使用Structured Streaming写从Kafka经过hudi到hdfs的代码,流式处理效率挺好