在当前技术环境下,使用Apache Kafka加载HDFS的选项/解决方案有哪些?
我正在这里寻找Kafka消费者端的选项。还需要寻找每天可扩展至至少数TB的数据。
我也有一些基本要求:a)对HDFS的输出应进行分区。 b)卡夫卡上的记录不一定严格按时间顺序排列,但输出应尽可能(尽可能)。 c)在系统中断(网络分区,软件/硬件崩溃等)的情况下可靠
我查看了StackOverflow,但是许多问答已过时。因此,这个问题。
答案 0 :(得分:1)
为了在Kafka和Hadoop HDFS之间移动数据,您可以使用Kafka Connect的HDFS连接器。可以在here中找到连接器的文档。
关于您的要求:
a)为了配置分区,您需要查看partitioner configuration in the documentation
b)Kafka中有一些订单保证。它仅提供分区中消息的总顺序,而不提供主题中不同分区之间的消息。例如,如果您需要确保与特定用户有关的消息已排序,则可以将密钥(例如user_id)分配给消息,以便将具有相同密钥的所有消息放入同一分区,因此它们订单是保证。
c)Kafka开箱即用地提供了高可用性(假设您已经正确设置了所需的代理和资源)。有关高可用性和数据丢失的更完整答案,see my answer to this question on SO。
答案 1 :(得分:0)
在Confluent HDFS连接器之前,有一种名为Camus的产品,您仍然可以在LinkedIn Github下找到它。该项目此后已移至Apache Gobblin项目。
就您可能发现的过时帖子而言,Apache Flume或Storm仍然存在,并且似乎是Cloudera环境中唯一的内置流选项。
Hortonworks提供Apache Nifi
Streamsets提供了Cloudera包裹。
Flink和Spark可以工作,但需要一定程度的知识才能可靠地扩展,维护和调试这些自定义过程(与Connect,Camus / Gobblin,Flume中的简单配置文件相比)。
根据您环境中可用的选项,虽然我个人对Fluentd或Logstash并没有太多经验,但我知道它们具有Kafka和HDFS配置选项
根据我的工作,Connect&Camus提供了最灵活的分区选项(即使您需要自己添加自定义分区程序,Partitioner界面也非常简单)。 Flume可能与此类似,但是我没有使用过。
Nifi和Streamset不需要部署任何JAR文件,这有其好处。
Storm / Spark / Flink当然都需要以创建分区的方式来编写。
可靠性和交付保证应通过补偿管理和主题保留在经纪人和消费者方面进行部分处理。通常,大多数消费者流程都会给您“至少一次”的消费