Kafka和NiFi的区别

19

我是Apache NiFi的初学者,但直到现在,我读的所有教程都谈论了kafka与Nifi的集成。为什么kafka是Nifi的补充?为什么我们不直接使用Nifi来发布消息,而不使用kafka呢?

注:我看过的所有教程都没有提到这一点。

3个回答

22
NiFi和Kafka是互补的,因为NiFi不像Apache Kafka那样是一个消息队列。相反,Apache NiFi是一种数据流管理工具,也称为数据物流工具。
假设这样的场景:您有通过Kafka流传的消息(以JSON格式),并且您想验证消息以检查消息是否具有所有字段以及它们是否有效,您希望将消息传输到HBase中。
在这种情况下,NiFi可以帮助您采用以下方法:
- NiFi具有“ConsumeKafka”处理器,您可以使用它来配置Kafka代理和组名。 - 使用NiFi处理器“ValidateRecord”来检查接收到的消息是否全部有效。 - 如果它们是有效的,您可以将输出连接到“PutHBaseRecord”。
总之,NiFi基本上避免您编写大量样板代码。在这种情况下,可以避免编写自定义逻辑来进行架构验证和写入到HBase。

想知道是否可以在Kafka中实现Nifi流文件存储,使得Nifi队列成为Kafka队列。这样做是否高效? - daggett
5
NiFi的队列和存储库非常特定于NiFi的需求,所以我不确定这是可能的。 - Bryan Bende
@daggett 你需要重新编写Nifi如何存储FlowFiles,而且Kafka有一个默认的最大消息大小为1M,而FlowFile可以比1M更大,但假设这个问题得到解决,那么还需要实现它们的Kafka序列化器。 - OneCricketeer

9

我在Hortonworks社区的问题中发现了一个有趣的答案,为了完整起见,在这里分享一下:

  • Apache NiFi和Apache Kafka是两种不同的工具,具有不同的用途,可能略有重叠。以下是我对这两个项目目的的理解。

    NiFi是“一个易于使用、强大且可靠的系统,用于处理和分发数据。

    它是一种可视化工具(具有REST API),实现基于流的编程,使用户能够创建流,从各种不同的来源获取数据,在处理数据时执行增强、路由等操作,并将结果输出到各种不同的目标。在此过程中,它捕获元数据(溯源),记录每个数据块(FlowFile)通过流程时发生了什么,以进行审计日志记录和故障排除。

  • "Apache Kafka是重新设计为分布式提交日志的发布-订阅消息"

    它是发布-订阅模式的分布式实现,允许开发人员在不同的语言和大量机器之间连接程序。它更像是分布式计算的构建块,而不是处理数据的一体化解决方案。


8
作为之前答案的补充,这里有一份宝贵的资源清晰地解释了如何结合这两种技术,特别是为什么要这样做,并提供了举例说明。

我发现这非常有价值,每当我需要恢复对这个主题的记忆时,我都会去参考这个资源。

Kafka / NiFi : Better together

简而言之:

NiFi和Kafka互为补充

NiFi
• 提供数据流解决方案
• 从边缘到核心的集中管理
• 出色的可追溯性,事件级数据溯源始于数据生成时
• 交互式命令和控制
• 实时运营可见性
• 数据流管理,包括优先级设置、反向压力和边缘智能
• 全局数据流的可视化表示


Kafka
• 提供持久的流存储
• 低延迟
• 分布式数据耐用性
• 生产者和消费者的分散管理
• 还有更多其他功能...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接