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



我们有一个在Kafka层测试数据的项目需求。所以JSON文件正在移动到hadoop区域,kafka正在读取hadoop(RawJson文件)中的实时数据。现在我必须测试从另一个系统发送的数据和kafka读取的数据是否应该相同。

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

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

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

Kafka社区也在研究分层存储,这将允许代理不仅使用本地磁盘,还可以卸载";冷数据";进入第二层:https://cwiki.apache.org/confluence/display/KAFKA/KIP-405%3A+Kafka+分层+存储

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

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

我认为你可以,但你必须手动完成。你可以让kafka接收HDFS的任何输出。也许我的回答有点晚了,在那之后出现了这种"融合"的提法,但简单地说,可以做以下几点:

  • 假设所有服务器都在运行(检查汇流网站)
  • 创建连接器:

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

  • 启动kafka hdfs拖缆

此外,您可能会在"堆栈溢出"讨论中找到更多有用的详细信息。

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

Yarn、MapReduce、HDFS是Hadoop的三大核心组件。Hive、Pig、OOOZIE、SQOOP、HBase等在Hadoop之上工作。

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

就像卡夫卡作为一个独立的实体,可以与Spark合作一样。它将消息存储在本地文件系统中。

log.dirs=/tmp/kafka-logs

您可以在$KAFKA_HOME/config/server.properties 上查看

希望这能有所帮助。

相关内容

最新更新