kafka学习笔记(一) --- 入门

         kafka作为一款开源的消息引擎系统,主要功能提供提供完备的消息发布和订阅的解决方案。它的消息传递属性,就像引擎,具备某种转化能量的能力。

         根据维基百科的定义,kafka是一组消息规范,企业利用在这组规范在不同系统间,传递精确语义定义的消息,实现松耦合的异步式数据传递。

         消息引擎最基础的功能:传递对象是消息;如何传递消息。

         支持两种消息引擎模型:点对点;发布订阅模型。

         消息引擎的作用:

                 削峰填谷:缓冲上下游瞬时突发流量,使其平滑。一般,上游的TPS高于下游,使得下游服务无法即时处理上游消息。

                 让两个系统之间实现松耦合,较少不必要的系统交互。

          专业术语解释:

                  主题(Topic):发布与订阅的对象,可以为每个业务、每个应用、或者每类数据定义一个主题。

                  生产者(producer):向主题发布消息的客户端应用程序。

                  消费者(consumer):订阅主题消息的客户端应用程序。

                  生产者和消费者统称为客户端。

                  对应于客户端,kafka的服务器端由被称为broker的服务进程构成。即一个kafka集群由多个broker组成,每个broker负责接收和处理客户端的请求,以及消息持久化。

                  高可用性:1. broker一般分布在多台机器上,这样只要有一台机器宕机,其他机器仍可对外提供服务。

                                    2. 备份机制:相同数据拷贝在不同机器,每个备份叫做副本,leader副本和follower副本。

                 副本工作机制:生产者向leader副本写消息,消费者从leader副本读消息,follower副本向leader副本发送请求,请求leader副本将消息发给它,以保持与领导者同步。

                 伸缩性:分区机制(partitioning),每个主题分为多个分区,每个分区是一组有序的消息日志,每条消息只会被发送到一个分区。kafka分区编号从0开始,分区位移(offset)也是从0开始。

         kafka的三层消息架构:

        主题层:每个主题分为多个分区,每个分区有多个副本。

        分区层:每个分区的多个副本,只能有一个leader,对外提供服务,其他的是follower,提供数据冗余之用。

        消息层:每个分区由若干消息组成, 消息位移从0开始。

        怎样持久化数据:kafka使用消息日志保存消息,一个消息日志就是磁盘上只能被追加写的物理文件。追加写,避免了缓慢的随机IO操作,改为性能较好的顺序IO写操作(高吞吐量的手段之一)。每个消息日志,进一步分为多个日志段,消息被追加写道当前最新日志段,写满即封存,开启新的日志段。kafka在后天定期检查老的日志段,过期的就删除,实现磁盘空间回收。

        kafka实现点对点模型是通过消费者组机制,多个消费者实例构成一个消费者组,消费一个主题,其中主题的每个分区只能被一个消费者实例消费。这样,多个消费者实例同时消费消息,增加了消费端的吞吐量(TPS)。            

       消费者组中的实例不仅可以瓜分订阅主题的数据,还彼此协助,即当某个消费者实例挂掉,kafka自动检测,把挂掉消费者实例消费的分区转移给其他的分区。被称为重平衡(rebalance)。

       kafka仅仅是消息引擎吗?

       kafka设计之初,旨在提供三方面特性:提供一套API实现生产者和消费者;降低网络传输和磁盘存储开销;实现高伸缩性架构。

       apache kafka 是消息引擎系统,也是分布式流处理平台。与其他主流大数据流式计算框架,有两点优势:端到端的正确性;对于自己流式计算的定位。

       另外,kafka还可以用作分布式存储系统。

       kafka组织:apache kafka; confluent kafka; CDH kafka和HDP kafka。

      如果仅仅需要一个消息引擎系统亦或简单的流处理应用场景,同时需要对系统有较大的把控度,推荐使用apache kafka;

      如果需要kafka的一些高级特性,推荐使用confluent kafka;

      如果需要快速搭建消息引擎系统,或者需要构建多框架构成的数据平台且kafka只是其中一个组件,推荐使用第三者。

      kafka版本演进:

      比如:

      

        kafka_2.11-2.1.1,真正版本号2.1.1, 2-大版本号,major version,中间的1-小版本号,minor version, 后面的1-修订版本号,patch号。“大版本号-小版本号-Patch号”。

        kafka目前演进了7个大版本,0.7、0.8、0.9、0.10、0.11、1.0、2.0。

        0.7版本:只提供基础的消息队列功能,连基本的副本机制都没有。

        0.8版本:引入副本机制,成为一个真正意义的完备的分布式高可靠消息队列解决方案。使用的是老版本的客户端API,在开发生产者和消费者,需指定Zookeeper地址而非Broker地址。在0.8.2.0中开始引入新版本Producer API,需指定Broker地址的Producer。如果还在用0.8.1.1、0.8.2,建议升级到0.8.2.2,消费者API比较稳定,但不要用新版本API。

        0.9.0.0:增加了基础的安全认证/权限功能,同时使用JAVA重写了新版本消费者AI,还引入了kafka connect组件(实现高性能的数据抽取)。新版本的Producer API比较稳定,但不要使用新版本consumer API。

        0.10.0.0:引入kafka streams,kafka正式升级为分布式流处理平台,但还基本不能线上部署。新版本的consumer API比较稳定。

        0.11.0.0:提供幂等性Producer API,以及事务API,对kafka消息格式重构。

        1.0和2.0:主要在kafka streams的各种改进。在消息引擎方面并未有太多变化。

        建议:尽量保证服务器端和客户端版本一致,否则会损失很多性能优化效益。

    标注:这个系列文章是本人在极客时间专栏---kafka核心技术与实战中的学习笔记

    https://time.geekbang.org/column/article/101171

发布了37 篇原创文章 · 获赞 20 · 访问量 4965

猜你喜欢

转载自blog.csdn.net/qq_24436765/article/details/100192761