lxyfirst

C++博客 首页 新随笔 联系 聚合 管理
  33 Posts :: 3 Stories :: 27 Comments :: 0 Trackbacks

消息中间件kafka简介

目的及应用场景

Kafkalinkedin的分布式消息系统,设计侧重高吞吐量,用于好友动态,相关性统计,排行统计,访问频率控制,批处理等系统。

传统的离线分析方案是使用日志文件记录数据,然后集中批量处理分析。这种方式对于实时性要求很高的活动流数据不适合,而大部分的消息中间件能够处理实时性要求高的消息/数据,但是对于队列中大量未处理的消息/数据在持久性方面比较弱。

 

设计理念

         持久化消息

         高吞吐量

         consumer决定消息状态

         系统中各个角色都是分布式集群

consumer有逻辑组的概念,每个consumer进程属于一个consumer组,每个消息会发给每个关注此消息的consumer组中的某一个consumer进程。

Linkedin使用了多个consumer组,每个组多个相同职责的consumer进程。

部署架构

http://sna-projects.com/kafka/images/tracking_high_level.png

消息持久化和缓存

Kafka使用磁盘文件做持久化,磁盘文件的读写速度在于如何使用,随机写比顺序写慢的多,现代os会在内存回收对性能影响不大的情况下尽量使用内存cache进行磁盘的合并写。所以用户进程再做一次缓存没有太大必要。Kafka的读写都是顺序的,以append方式写入文件。

 

为减少内存copykafka使用sendfile发送数据,通过合并message提升性能。

 

Kafka不储存每个消息的状态,而使用(consumer,topic,partition)保存每个客户端状态,大大减小了维护每个消息状态的麻烦。

 

在消息的推vs拉的选择上,kafka使用拉的方式,因为推的方式会因为各个客户端的处理能力、流量等不同产生不确定性。

 

负载均衡

Producersbrokers通过硬件做负载均衡,brokersconsumers都以集群方式运行,通过zookeeper协调变更和成员管理。

 

 

posted on 2011-01-25 15:56 star 阅读(2094) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理