【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

Kafka 的 API 那么多,到底该怎么选?

  • 2018-11-15
  • 本文字数:2441 字

    阅读完需:约 8 分钟

Kafka的API那么多,到底该怎么选?

AI 前线导读:


本文介绍了各种 Kafka API 的应用场景。


更多干货内容请关注微信公众号“AI 前线”(ID:ai-front)


Kafka 是一头值得研究的野兽。尽管随着时间的推移,Kafka 的内核已经相当稳定,但围绕 Kafka 的框架却在迅速发展。


几年前,Kafka 很容易理解:Producer 和 Consumer。现在,我们还有 Kafka Connect、Kafka Streams 和 KSQL。它们是要取代 Producer 或 Consumer API,还是对它们的补充?本文将详细说明。


一个简单的示意图

选择合适的 Kafka API

我把 Apache Kafka 中的工作负载归纳成 5 类,在我看来, 每一种对应一种特定的 API:


  • Kafka Producer API:应用程序直接生成数据(如点击流、日志、物联网);

  • Kafka Connect Source API:应用程序连接我们无法控制的数据存储和 Kafka(如 CDC、Postgres、MongoDB、Twitter、REST API);

  • Kafka Streams API / KSQL:从 Kafka 消费并把生成的数据传回 Kafka 的应用程序,也称为流处理。如果你认为你只需要编写类似 SQL 的实时任务,则可以使用 KSQL;如果你认为你需要编写复杂的任务逻辑,则可以使用 Kafka Streams API。

  • Kafka Consumer API: 读取流并以此为依据实时执行动作(如发送电子邮件);

  • Kafka Connect Sink API: 读取流,并将其保存到目标存储(如 Kafka 到 S3、Kafka 到 HDFS、Kafka 到 PostgreSQL、Kafka 到 MongoDB 等)。


你可能想做一些和上面说的都不一样的事情,Kafka 也支持你这么做。例如,如果你想要根据自己的需求编写大量定制化代码,Kafka Consumer 和 Kafka Connect Sink API 是可以互换的。


总的来说,上面的指导原则应该可以帮助你以最少的代码和挫折来实现最高效的工作流。

Kafka Producer API

优点


Kafka Producer API 使用起来非常简单:发送数据,这是异步的,会有一个回调。这非常适合直接发送数据流的应用程序,比如日志、点击流、物联网。


这种 API 经常和代理一起使用。


局限


Kafka Producer API 可以扩展,你可以以此为基础做更多的事情,但是,这需要工程师编写大量的附加逻辑。我发现,人们犯的最大错误是试图使用 Producer API 在数据库和 Kafka 之间执行 ETL。以下是一些不容易做到的事情:


如何跟踪源偏移?(即如果 Producer 停止了,该如何恰当恢复)


如何在多个 Producer 之间分配 ETL 工作负载?为此,我们最好使用 Kafka Connect Source API。

Kafka Connect Source API

优点


Kafka Connect Source API 是一个构建在 Producer API 之上的完整框架。它主要是为了让开发人员能够有一个更好的 API:1)用于 Producer 任务分发以进行并行处理,2)提供 Producer 恢复的简单机制。最后一个好处是提供了各种各样的连接器,你现在可以利用它们从大多数源传输数据,而无需编写一行代码。


局限


如果你未能为自己的源找到一个可用的源连接器,原因是在你的的环境中使用了一个专有的系统,那么你将不得不编写自己的源连接器。编写自己的源连接器实际上还算轻松,但调试它就不那么令人愉快了。

Kafka Consumer API

优点


Kafka Consumer API 非常简单,它使用 Consumer 群组,所以主题可以并行消费。尽管你需要小心处理一些事情,比如偏移管理和提交,以及重新平衡和幂等约束,但是它们非常容易编写。对于任何无状态的工作负载,它们都是完美的选择。


局限


当你执行某种 ETL 时,Kafka Connect Sink 更适合,因为它们使你不必针对外部数据源编写一些复杂的逻辑。

Kafka Connect Sink API

优点


与 Kafka Connect Source API 类似,Kafka Connect Sink API 允许你利用现有的 Kafka 连接器生态系统来执行流 ETL,而无需编写一行代码。Kafka Connect Sink API 是构建在 Consumer API 之上的,但是看起来和它没有什么不同。


局限


如果你要编写的数据接收器还没有可用的连接器,则必须编写 Kafka Connect Sink(如果你愿意,也可以是消费者),调试过程可能会稍微复杂一些。

Kafka Streams API

优点


如果你想要进入流处理的世界,即实时读取来自 Kafka 的数据,并在处理之后将其写回 Kafka,那么,如果你把 Kafka Consumer API 和 Kafka Producer API 链接在一起使用的话,你很可能陷入麻烦之中。值得庆幸的是,Kafka 项目现在提供了 Kafka Streams API (可用于 Java 和 Scala),让你可以编写高级 DSL(类似于函数式编程 / Apache Spark 类型的程序)或低级 API(和 Apache Storm 更为相似)。使用 Kafka Streams API 确实需要编写代码,但完全隐藏了维护生产者和消费者的复杂性,使你可以专注于流处理器的逻辑。它还具有连接、聚合和只执行一次处理的特性。


局限


你将不得不编写一些代码,这可能会变得非常混乱和复杂。直到最近,还很难对 Kafka Streams 应用程序进行单元测试,但现在可以使用 test-utils 库来实现。最后,尽管 Kafka Streams 看起来很简单,但它实际上是后台的一头野兽,它会创建状态存储,很可能是以 Kafka 主题为基础。这意味着,虽然作为额外的好处,你将拥有“无状态”和完全弹性的应用程序,但基于拓扑的复杂性,Kafka 集群可能不得不开始处理更多的消息。

KSQL

优点


KSQL 不是 Kafka API 的直接组成部分,而是 Kafka Streams 的包装器。在这里仍然值得一提。尽管 Kafka Streams 使你可以编写一些复杂的拓扑,但那需要一些丰富的编程知识,而且可能难以阅读,尤其是对于新手来说。KSQL 希望通过提供一个 SQL 语义(非 ANSI)来抽象这种复杂性,该语义与你今天已经了解的内容非常接近。我不得不承认,它非常具有吸引力,使你可以轻松编写流处理器。记住,这不是批处理 SQL,而是流 SQL,因此会出现一些警告。


局限


如果你想要进行复杂的转换、分解数组或需要一个尚未可用的特性,有时你必须回到 Kafka Streams。这个库的发展非常迅速,所以我预计功能缺口可以很快被填补。

总 结

我希望本文能够帮助你理解哪种 Kafka API 适合你的场景,以及为什么。


查看英文原文:


https://medium.com/@stephane.maarek/the-kafka-api-battle-producer-vs-consumer-vs-kafka-connect-vs-kafka-streams-vs-ksql-ef584274c1e


如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2018-11-15 19:092396
用户头像

发布了 1008 篇内容, 共 374.1 次阅读, 收获喜欢 340 次。

关注

评论

发布
暂无评论
发现更多内容

手撸一个在线css三角形生成器

徐小夕

CSS css3 大前端 CSS小技巧

云计算领域-杨明越加入InfoQ协作平台

杨明越

我是程序员,我用这种方式铭记历史

kokohuang

Hexo GitHub Pages python 爬虫 中国历史 铭记历史

年薪百万offer从何入手?这份“通关面试手册”带你轻松碾压字节面试官

比伯

Java 编程 架构 面试 计算机

阿里巴巴内部秘密培养的“Java架构师养成计划”图谱曝光,全是干货!

Java架构追梦

Java 学习 架构 面试 阿里巴巴人才培养计划

什么是工作流?工作流有什么作用?怎样配置工作流程?

Marilyn

敏捷开发 工作流

花火交易所APP软件系统开发(现成)

系统开发

第十一周 安全稳定总结

蓝黑

极客大学架构师训练营

第七周总结

小兵

第十一周 安全稳定作业

蓝黑

极客大学架构师训练营

突破容量极限:TiDB 的海量数据“无感扩容”秘籍

京东科技开发者

分布式数据库 #TiDB

数据资产管理平台规划概要

马踏飞机747

大数据 数据治理 数据资产

App自动化《元素定位方式、元素操作、混合应用、分层设计、代码方式执行Pytest 命令》

清菡软件测试

App

话题讨论 | 作为开发你是如何阅读源码的?

程序员小航

话题讨论

架构师训练营第 1 期第 11 周总结

owl

极客大学架构师训练营

公安情报研判管控分析平台建设解决方案

t13823115967

智慧公安情报研判系统开发 智慧公安 情报研判管控分析平台

基于区块链技术落地应用开发-食品溯源

13828808769

话题讨论 | 程序员摸鱼的时候都喜欢干些什么

soolaugust

话题讨论

源码深度解析 Handler 机制及应用

vivo互联网技术

android 客户端开发

低成本快速上链 智臻链开放联盟网络正式对外开放

京东科技开发者

区块链 京东

线程上下文切换,这些是你需要掌握的

田维常

系统上下文

探秘密码学:深入了解对称加密与密钥协商技术

京东科技开发者

网络安全 密码学

话题讨论 | 深入浅出Linux内存管理,图解物理内存和虚拟内存

程序员柠檬

话题讨论

智慧公安情报指挥合成作战管控平台开发

t13823115967

智慧公安情报研判系统开发 智慧公安 合成作战管控平台

话题讨论 | go、php 、java、python、cpp谁才能成为后端的主流

sinsy

Java c++ php 话题讨论 Go 语言

话题讨论 | 2020年你有什么推荐的书

soolaugust

话题讨论

教你用Python自制拼图小游戏,轻松搞定熊孩子

华为云开发者联盟

Python 游戏 拼图

《写给大忙人看的JAVA核心技术》.pdf

田维常

电子书

Seata是什么?一文了解其实现原理

vivo互联网技术

分布式 分布式事务 分布式架构

架构师训练营第 1 期第 11 周作业

owl

极客大学架构师训练营

阿里云Lindorm与Intel、OSIsoft共建IT & OT超融合工业数据云

许力

数据库 大数据 IoT 工业互联网 工业物联网

Kafka的API那么多,到底该怎么选?_AI&大模型_Stéphane Maarek_InfoQ精选文章