当前位置首页 > 百科> 正文

KafkaMQ

2019-07-28 21:24:11 百科
KafkaMQ

KafkaMQ

Kafka MQ是一个高吞吐量分散式讯息系统。是由linkedin开源的讯息中间件。

基本介绍

  • 中文名:Kafka MQ
  • 外文名:Kafka MQ
  • 性质:高吞吐量分散式讯息系统
  • 属于:linkedin开源的讯息中间件
  • 部署架构:讯息的持久化和快取

什幺是Kafka MQ

Kafka MQ是一个高吞吐量分散式讯息系统。是由linkedin开源的讯息中间件。 Kafka就跟这个名字一样,设计非常独特

特点

kafka的开发者们认为不需要在记忆体里快取什幺数据,作业系统的档案快取已经足够完善和强大,只要你不搞随机写,顺序读写的性能是非常高效的。
kafka的数据只会顺序append,数据的删除策略是累积到一定程度或者超过一定时间再删除。
Kafka另一个独特的地方是将消费者信息保存在客户端而不是MQ伺服器,这样伺服器就不用记录讯息的投递过程,每个客户端都自己知道自己下一次应该从什幺地方什幺位置读取讯息,讯息的投递过程也是採用客户端主动pull的模型,这样大大减轻了伺服器的负担。
Kafka还强调减少数据的序列化和拷贝开销,它会将一些讯息组织成Message Set做批量存储和传送,并且客户端在pull数据的时候,儘量以zero-copy的方式传输,利用sendfile(对应java里的 FileChannel.transferTo/transferFrom)这样的高级IO函式来减少拷贝开销。
可见,kafka是一个精心设计,特定于某些套用的MQ系统,这种偏向特定领域的MQ系统我估计会越来越多,垂直化的产品策略值的考虑。
kafka是一种高吞吐量的分散式发布订阅讯息系统,她有如下特性: 通过O(1)的磁碟数据结构提供讯息的持久化,这种结构对于即使数以TB的讯息存储也能够保持长时间的稳定性能。
高吞吐量:即使是非常普通的硬体kafka也可以支持每秒数十万的讯息。
支持通过kafka伺服器和消费机集群来分区讯息。
支持Hadoop并行数据载入。
卡夫卡的目的是提供一个发布订阅解决方案,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜寻和其他用户的行动)是在现代网路上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日誌和日誌聚合来解决。
对于像Hadoop的一样的日誌数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。kafka的目的是通过Hadoop的并行载入机制来统一线上和离线的讯息处理,也是为了通过集群机来提供实时的消费。 设计侧重高吞吐量,用于好友动态,相关性统计,排行统计,访问频率控制,批处理等系统。 传统的离线分析方案是使用日誌档案记录数据,然后集中批量处理分析。
这种方式对于实时性要求很高的活动流数据不适合,而大部分的讯息中间件能够处理实时性要求高的讯息/数据,但是对于伫列中大量未处理的讯息/数据在持久性方面比较弱。

设计理念

持久化讯息 高吞吐量 consumer决定讯息状态 系统中各个角色都是分散式集群 consumer有逻辑组的概念,每个consumer进程属于一个consumer组,每个讯息会发给每个关注此讯息的consumer组中的某一个consumer进程。 Linkedin使用了多个consumer组,每个组多个相同职责的consumer进程。

部署架构

讯息的持久化和快取
Kafka使用磁碟档案做持久化,磁碟档案的读写速度在于如何使用,随机写比顺序写慢的多,现代os会在记忆体回收对性能影响不大的情况下儘量使用记忆体cache进行磁碟的合併写。所以用户进程再做一次快取没有太大必要。Kafka的读写都是顺序的,以append方式写入档案。
为减少记忆体copy,kafka使用sendfile传送数据,通过合併message提升性能。
Kafka不储存每个讯息的状态,而使用(consumer,topic,partition)保存每个客户端状态,大大减小了维护每个讯息状态的麻烦。
在讯息的推vs拉的选择上,kafka使用拉的方式,因为推的方式会因为各个客户端的处理能力、流量等不同产生不确定性。

负载均衡

Producers和brokers通过硬体做负载均衡,brokers和consumers都以集群方式运行,通过zookeeper协调变更和成员管理
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net