2

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

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

4

3 回答 3

6

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+and+Partition+Leader例子)。还要记住,分区是复制的,如果你写,你总是需要写入分区领导者(如果你创建一个KafkaProduceris 将自动找到你写入的每个分区的领导者)。

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

于 2016-05-19T07:54:04.197 回答
1

我认为你可以,但你必须手动完成。您可以让 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
    
  • 注意:该方法假设您使用的是我没有使用过的他们的平台( confluent platform )。

  • 触发 kafka-hdfs 流媒体。

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

于 2017-07-15T02:10:21.817 回答
0

大多数初学者都会发生这种情况。让我们首先了解您在大数据处理中看到的组件可能与 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

希望这可以帮助。

于 2018-06-30T17:28:56.540 回答