我们有一个项目要求在Kafka Layer测试数据。所以JSON文件正在进入hadoop区域,而kafka正在读取hadoop(Raw Json File)中的实时数据。现在我必须测试从其他系统发送并由kafka读取的数据是否应该相同。
我可以在kafka验证数据吗? kafka是否在HDFS内部存储消息?如果是,那么它是否存储在类似于hive内部保存的文件结构中,就像单个表的单个文件夹一样。
答案 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,但简单地说,可以做到以下几点:
创建连接器:
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)我无法使用。
此外,您可能会在此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
希望这会有所帮助。