You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
7.7 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 开篇词 | 为什么要学习Kafka
你好我是胡夕Apache Kafka Committer老虎证券用户增长团队负责人也是《Apache Kafka实战》这本书的作者。
在过去5年中我经历了Kafka从最初的0.8版本逐步演进到现在的2.3版本的完整过程踩了很多坑也交了很多学费慢慢地我梳理出了一个相对系统、完整的Kafka应用实战指南最终以“Kafka核心技术与实战”专栏的形式呈现给你希望分享我对Apache Kafka的理解和实战方面的经验帮你透彻理解Kafka、更好地应用Kafka。
你可能会有这样的疑问,**我为什么要学习Kafka呢**?要回答这个问题,我们不妨从更大的视角来审视它,先聊聊我对这几年互联网技术发展的理解吧。
互联网蓬勃发展的这些年涌现出了很多令人眼花缭乱的新技术。以我个人的浅见截止到2019年当下互联网行业最火的技术当属ABC了即所谓的AI人工智能、BigData大数据和Cloud云计算云平台。我个人对区块链技术发展前景存疑毕竟目前没有看到特别好的落地应用场景也许在未来几年它会更令人刮目相看吧。
在这ABC当中坦率说A和C是有点曲高和寡的不是所有玩家都能入场。反观B要显得平民得多几乎所有公司都能参与进来。我曾经到过一个理发厅那里的人都宣称他们采用了大数据系统帮助客户设计造型足见BigData是很“下里巴人”的。
作为工程师或架构师,你在实际工作过程中一定参与到了很多大数据业务系统的构建。由于这些系统都是为公司业务服务的,所以通常来说它们仅仅是执行一些常规的业务逻辑,因此它们不能算是计算密集型应用,相反更应该是数据密集型的。
对于数据密集型应用来说如何应对数据量激增、数据复杂度增加以及数据变化速率变快是彰显大数据工程师、架构师功力的最有效表征。我们欣喜地发现Kafka在帮助你应对这些问题方面能起到非常好的效果。就拿数据量激增来说Kafka能够有效隔离上下游业务将上游突增的流量缓存起来以平滑的方式传导到下游子系统中避免了流量的不规则冲击。由此可见如果你是一名大数据从业人员熟练掌握Kafka是非常必要的一项技能。
刚刚所举的例子仅仅是Kafka助力业务的一个场景罢了。事实上Kafka有着非常广阔的应用场景。不谦虚地说目前Apache Kafka被认为是整个消息引擎领域的执牛耳者仅凭这一点就值得我们好好学习一下它。另外从学习技术的角度而言Kafka也是很有亮点的。我们仅需要学习一套框架就能在实际业务系统中实现消息引擎应用、应用程序集成、分布式存储构建甚至是流处理应用的开发与部署听起来还是很超值的吧。
不仅如此再给你看一个数据。援引美国2019年Dice技术薪资报告中的数据在10大薪资最高的技术技能中掌握Kafka以平均每年12.8万美元排名第二排名第一位的是13.2万美元/年的Go语言。好吧希望你看到这个之后不会立即关闭我的专栏然后转头直奔隔壁的Go语言专栏。虽然这是美国人才市场的数据但是我们有理由相信在国内Kafka的行情也是水涨船高。2019年两会上再一次提到了要深化**大数据**、人工智能等研发应用而Kafka无论是作为消息引擎还是实时流处理平台都能在大数据工程领域发挥重要的作用。
总之Kafka是个利器值得一试既然知道了为什么要学Kafka那我们就要行动起来把它学透而学透Kafka有什么路径吗
如果你是一名软件开发工程师的话掌握Kafka的第一步就是要根据你掌握的编程语言去寻找对应的Kafka客户端。当前Kafka最重要的两大客户端是Java客户端和libkafka客户端它们更新和维护的速度很快非常适合你持续花时间投入。
一旦确定了要使用的客户端,马上去官网上学习一下代码示例,如果能够正确编译和运行这些样例,你就能轻松地驾驭客户端了。
下一步你可以尝试修改样例代码尝试去理解并使用其他的API之后观测你修改的结果。如果这些都没有难倒你你可以自己编写一个小型项目来验证下学习成果然后就是改善和提升客户端的可靠性和性能了。到了这一步你可以熟读一遍Kafka官网文档确保你理解了那些可能影响可靠性和性能的参数。
最后是学习Kafka的高级功能比如流处理应用开发。流处理API不仅能够生产和消费消息还能执行高级的流式处理操作比如时间窗口聚合、流处理连接等。
如果你是系统管理员或运维工程师那么相应的学习目标应该是学习搭建及管理Kafka线上环境。如何根据实际业务需求评估、搭建生产线上环境将是你主要的学习目标。另外对生产环境的监控也是重中之重的工作Kafka提供了超多的JMX监控指标你可以选择任意你熟知的框架进行监控。有了监控数据作为系统运维管理员的你势必要观测真实业务负载下的Kafka集群表现。之后如何利用已有的监控指标来找出系统瓶颈然后提升整个系统的吞吐量这也是最能体现你工作价值的地方。
在明确了自己要学什么以及怎么学之后,你现在会不会有一种感慨:原来我要学习这么多东西呀!不用担心,刚刚我提到的所有内容都会在专栏中被覆盖到。
下面是我特意为专栏画的一张思维导图可以帮你迅速了解这个专栏的知识结构体系是什么样的。专栏大致从六个方面展开包括Kafka入门、Kafka的基本使用、客户端详解、Kafka原理介绍、Kafka运维与监控以及高级Kafka应用。
![](https://static001.geekbang.org/resource/image/8b/95/8b28137150c70d66200f649e26ff2395.jpg)
* 专栏的第一部分我会介绍消息引擎这类系统大致的原理和用途以及作为优秀消息引擎代表的Kafka在这方面的表现。
* 第二部分则重点探讨Kafka如何用于生产环境特别是线上环境方案的制定。
* 在第三部分中我会陪你一起学习Kafka客户端的方方面面既有生产者的实操讲解也有消费者的原理剖析你一定不要错过。
* 第四部分会着重介绍Kafka最核心的设计原理包括Controller的设计机制、请求处理全流程解析等。
* 第五部分则涵盖Kafka运维与监控的内容想获得高效运维Kafka集群以及有效监控Kafka的实战经验我必当倾囊相助
* 最后一个部分我会简单介绍一下Kafka流处理组件Kafka Streams的实战应用希望能让你认识一个不太一样的Kafka。
这里不得不提的是有熟悉我的读者可能知道我出版过的图书《Apache Kafka实战》。你可能有这样的疑问既然有书了那么这个专栏与书的区别又是什么呢《Apache Kafka实战》这本书是基于Kafka 1.0版本撰写的但目前Kafka已经演进到2.3版本了我必须要承认书中的部分内容已经过时甚至是不准确了而专栏的写作是基于Kafka的最新版。并且专栏作为一次全新的交付我希望能用更轻松更容易理解的语言和形式帮你获取到最新的Kafka实战经验。
我希望通过学习这个专栏你不仅能够将Kafka熟练运用到实际工作当中去而且还能培养出对于Kafka或是其他技术框架的浓厚学习兴趣。
最后我希望用一句话收尾与你共勉Stay focused and work hard