Kafka Connect HDFS 接收器与 Azure Blob 存储

Kafka Connect HDFS Sink with Azure Blob Storage

我想使用 Kafka HDFS 接收器连接器连接到 Azure Blob 存储。 到目前为止我已经做了:

  1. 设置kafka-connect属性:

    hdfs.url=wasbs://<my_url>
    hadoop.conf.dir={hadoop_3_home}/etc/hadoop/
    hadoop.home={hadoop_3_home}
    
  2. 并在 core-site.xml 中添加了对 wasbs 的支持:

    <property>
        <name>fs.wasbs.impl</name>
        <value>org.apache.hadoop.fs.azure.NativeAzureFileSystem</value>
    </property>
    
  3. 导出HADOOP_CLASSPATH变量,添加到PATH

但是无论如何,Hadoop找不到class - NativeAzureFileSystem:

at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
 at io.confluent.connect.hdfs.storage.StorageFactory.createStorage(StorageFactory.java:29)
 ... 11 more
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.azure.NativeAzureFileSystem not found
 at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195)
 at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2654)
 at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667)
 at org.apache.hadoop.fs.FileSystem.access0(FileSystem.java:94)

你能帮忙解决这个问题吗?有可能吗?

my goal is: backup everything from Kafka to Azure BLOB of any data format.

HDFS 和云连接器无法备份 "any format"。 Confluent 的 Avro 是第一个 class 文件格式公民。 JSON 其次,但根据我的发现,没有 "plain text" 格式。我认为 HDFS 连接器确实支持 "byte array" 格式。

正如我在评论中提到的,在我看来,Kafka 的备份不同于将数据无限期保留到文件系统。备份 Kafka 到 Kafka 包括使用 MirrorMaker。

如果您想使用任何格式,Spark、Flink、NiFi 或 Streamsets 可以更灵活地开箱即用