消息中间件kafka(0.9以及0.10版本)学习及实践

本文介绍了消息中间件Kafka的特性,包括高吞吐量、持久化、分布式设计等,并探讨了何时需要使用消息队列。详细阐述了Kafka的组件、消息发送流程、原理和实践应用。同时对比了Kafka的0.9和0.10版本,涉及安全特性、新Consumer API、Kafka Connect和配额控制等改进。
摘要由CSDN通过智能技术生成
目录
一、介绍
二、特点
三、何时需要消息队列
四、组件
五、消息发送的流程
六、原理
七、实践
八、版本比较
中间件交流群:461333361
一、介绍
kafka,A distributed publish-subscribe messaging system,消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。

kafka是LinkedIn开源出来的一款消息中间件,用scala语言,在LinkedIn的业务场景中用于收集日志信息,典型的pub-sub中的pull模型。一般的JMS都是push模型,如老牌的RabbitMQ,ActiveMQ等。pull模型的还有RocketMQ,用java语言基于kafka原理改写的,一种优化的做法----长轮询pull模型。

二、特点
MQ生来就是解决生产者和消费者速度不匹配的问题而诞生的,那么MQ系统一个最最基本的要求就是写入速度必须要快,哪怕出队速度慢点也无所谓,因为业务高峰期持续时间是有限的,高峰结束之后有的是时间让消费者慢慢消化,更别说简单粗暴多加几台消费者就好了。
1.同时为发布和订阅提供高吞吐量。据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。
2.可进行持久化操作。将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及replication防止数据丢失。
3.分布式系统,易于向外扩展。所有的producer、broker和consumer都会有多个,均为分布式的。无需停机即可扩展机器。
4.消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡。
5.支持online和offline的场景。

三、何时需要消息队列
MQ消息队列是应运松偶合的概念而产生的,主要以队列和发布订阅为消息传输机制,以异步的方式将消息可靠的传输到消费端的一种基础产品。
它被广泛的应用与跨平台、跨系统的分布式系统之间,为它们提供高效可靠的异步传输机制。
可以使用mq的场景有很多,最常用的几种,是做业务解耦/最终一致性/广播/错峰流控等。反之,如果需要强一致性,关注业务逻辑的处理结果,则RPC显得更为合适。

四、组件

broker:发布和订阅的中间者,堆积消息。
zookeeper:管理kafka集群,监控每个broker的状态,使得发布和订阅都与有效的broker进行。
producer:消息的发布者。 Producer将消息发布到指定的Topic中,同时Producer也能决定将此消息发送到哪个partition。
consumer:异步消费者,通过订阅感兴趣的topic,从broker拉取消息进行消费。在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻);每个group中consumer消息消费互相独立;我们可以认为一个group是一个"订阅"者,一个Topic中的每个partions,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以同时消费多个partitions中的消息.kafka只能保证一个partition中的消息被某个consumer消费时是顺序的.事实上,从Topic角度来说,当有多个partitions时,消息仍不是全局有序的.
Consumer group: 每个consumer客户端被创建时,会向zookeeper注册自己的信息;此作用主要是为了"负载均衡".一个group中的多个consumer可以交错的消费一个topic的所有partitions;简而言之,保证此topic的所有partitions都能被此group所消费,且消费时为了性能考虑,让partition相对均衡的分散到每个consumer上.
topic:将消息划分成话题,作为某一类型的队列。
Partition:
parition是物理上的概念,每个topic包含一个或多个partition,创建topic时可指定parition数量。每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件。topic进行划分为多个分区,分区可以自己写函数指定分配消息到某一分区,默认的如hash,round-robin方式,Kafka尽量的使所有分区均匀的分布到集群所有的节点上而不是集中在某些节点上,另外主从关系也尽量均衡这样每个几点都会担任一定比例的分区的leader.。 每个partition是一个有序的队列,每条消息拥有一个offset。

五、消息发送的流程

1.Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面
2.kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费。
3.Consumer从kafka集群pull数据,并控制获取消息的offset
六、原理

1.持久化
kafka使用文件存储消息(append only log),这就直接决定kafka在性能上严重依赖文件系统的本身特性.且无论任何OS下,对文件系统本身的优化是非常艰难的.文件缓存/直接内存映射等是常用的手段.因为kafka是对日志文件进行append操作,因此磁盘检索的开支是较小的;同时为了减少磁盘写入的次数,broker会将消息暂时buffer起来,当消息的个数(或尺寸)达到一定阀值时,再flush到磁盘,这样减少了磁盘IO调用的次数.对于kafka而言,较高性能的磁盘,将会带来更加直接的性能提升.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值