【问题标题】:Does Apache Kafka Store the messages internally in HDFS or Some other File systemApache Kafka 是否将消息内部存储在 HDFS 或其他文件系统中
【发布时间】:2016-09-13 02:50:18
【问题描述】:

我们有一个项目要求在 Kafka 层测试数据。因此 JSON 文件正在移动到 hadoop 区域,而 kafka 正在读取 hadoop(原始 Json 文件)中的实时数据。现在我要测试从其他系统发送的数据和kafka读取的数据是否应该相同。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    更多信息,请浏览https://cwiki.apache.org/confluence/display/KAFKA/Index

    【讨论】:

    • 感谢您的回答。您能否详细说明一下,例如我可以检查文件中实际数据的确切物理位置。
    • 我扩展了我的答案。希望这会有所帮助。
    【解决方案2】:

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

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

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

    Kafka 作为一个独立的实体,同样可以与 Spark 一起工作。它将消息存储在本地文件系统中。

    log.dirs=/tmp/kafka-logs
    

    你可以在$KAFKA_HOME/config/server.properties查看这个

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      我认为你可以,但你必须手动完成。您可以让 kafka 将任何输出下沉到 HDFS。也许我的回答有点晚了,之后出现了这个'confluent' reference,但简单来说,可以做以下事情:

      • 假设所有服务器都在运行(检查 confluent 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 中找到更多有用的详细信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-11
        • 2021-08-29
        • 1970-01-01
        • 2017-10-02
        • 2020-09-12
        • 1970-01-01
        • 2019-05-23
        • 2020-08-19
        相关资源
        最近更新 更多