词条 | KafkaMQ |
释义 | 什么是Kafka MQKafka 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协调变更和成员管理 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。