Apache Kafka是否在HDFS或其他某些文件系统内部存储消息

时间:2016-05-17 06:33:05

标签: hadoop hdfs apache-kafka kafka-producer-api kafka-python

我们有一个项目要求在Kafka Layer测试数据。所以JSON文件正在进入hadoop区域,而kafka正在读取hadoop(Raw Json File)中的实时数据。现在我必须测试从其他系统发送并由kafka读取的数据是否应该相同。

我可以在kafka验证数据吗? kafka是否在HDFS内部存储消息?如果是,那么它是否存储在类似于hive内部保存的文件结构中,就像单个表的单个文件夹一样。

3 个答案:

答案 0 :(得分:3)

Kafka将数据存储在本地文件中(即每个正在运行的代理的本地文件系统)。对于这些文件,Kafka使用自己的存储格式,该格式基于分区的仅附加日志抽象。

可以通过参数log.dir配置本地存储目录。此配置针对每个代理单独发生,即每个代理可以使用不同的位置。默认值为/tmp/kafka-logs

此外,每个主题都有多个分区。分区的分布方式是Kafka内部实现细节。因此,你现在应该依赖它。要获取群集的当前状态,您可以请求有关主题和分区等的元数据(有关代码示例,请参阅https://cwiki.apache.org/confluence/display/KAFKA/Finding+Topic+and+Partition+Leader)。还要记住,分区是复制的,如果你写,你总是需要写入分区负责人(如果你创建KafkaProducer将自动找到你写的每个分区的领导者。)

有关详细信息,请浏览https://cwiki.apache.org/confluence/display/KAFKA/Index

答案 1 :(得分:0)

我认为你可以,但你必须手动完成。您可以让kafka将任何输出接收到HDFS。也许我的答案有点晚了,之后出现'confluent' reference,但简单地说,可以做到以下几点:

  • 假设您正在运行所有服务器(请检查汇合 website
  • 创建连接器:

    name=hdfs-sink
    
    connector.class=io.confluent.connect.hdfs.HdfsSinkConnector
    
    tasks.max=1
    
    topics='your topic'
    
    hdfs.url=hdfs://localhost:9000
    
    flush.size=3
    
  • 注意:该方法假定您正在使用他们的平台 (confluent platform)我无法使用。

  • 点燃kafka-hdfs流光。

此外,您可能会在此Stack Overflow discussion中找到更多有用的详细信息。

答案 2 :(得分:0)

大多数初学者都会发生这种情况。首先让我们了解一下,您在大数据处理中看到的组件可能与Hadoop根本无关。

Yarn,MapReduce,HDFS是Hadoop的3个主要核心组件。 Hive,Pig,OOOZIE,SQOOP,HBase等在Hadoop之上工作。

像Kafka或Spark这样的框架不依赖Hadoop,它们是独立的实体。 Spark支持Hadoop,例如Yarn,可用于Spark的集群模式,HDFS用于存储。

Kafka作为独立实体的相同方式可以与Spark一起使用。它将消息存储在本地文件系统中。

gcc my_project.c wrapper.o -o my_project -L../some_library/lib -lSomeFirstLibrary -lSomeSecondLibrary

您可以在log.dirs=/tmp/kafka-logs

进行检查

希望这会有所帮助。