kafka相关

概述

kafka是一个分部式发布-订阅消息系统。kafka最初是由linkedIn开发,之后成为Apache的一部分。kafka是一个快速的、可扩展的、设计分布式的、分区和可复制的日志提交服务。

优点

  • 被设计为一个分布式系统,便于横向扩展
  • 同时为发布和订阅提供高吞吐量
  • 支持多订阅者,当失败的时候能够重新平衡
  • 消息持久化到磁盘,可以用于批量消费

架构

基本概念

  • Topic(话题):特定类型的消息流,不同的消息按照topic进行分组
  • Broker:kafka的服务端集群
  • Producer:消息的生产者
  • Consumer:消息的消费者

存储

为了保证负载均衡,每一个Topic会被分为多个partition。Topic的每个partition对应到一个逻辑日志。一个日志分为大小相等的一组段文件。每当有新的消息产生时,就在最新的段末尾追加这个消息。当段文件达到一定大小时,就将其写入磁盘并被Consumer消费。
与传统的消息系统不同,kafka没有明确的消息id。
消息通过日志中的逻辑偏移量来公开。这样就避免了维护配套密集寻址,用于映射消息ID到实际消息地址的随机存取索引结构的开销。消息ID是增量的,但不连续。要计算下一消息的ID,可以在其逻辑偏移的基础上加上当前消息的长度。

消费者始终从特定分区顺序地获取消息,如果消费者知道特定消息的偏移量,也就说明消费者已经消费了之前的所有消息。消费者向代理发出异步拉请求,准备字节缓冲区用于消费。每个异步拉请求都包含要消费的消息偏移量。Kafka利用sendfile API高效地从代理的日志段文件中分发字节给消费者。

Broker

kafka的代理是无状态的,不会记录每个消费者的消费进度。这里需要消费者自行记录消费状态。

Zookeeper

zookeeper用于协调管理kafka的代理。每个Kafka代理都通过ZooKeeper协调其它Kafka代理。当Kafka系统中新增了代理或者某个代理故障失效时,ZooKeeper服务将通知生产者和消费者。生产者和消费者据此开始与其它代理协调工作。
这里写图片描述

对比

对比RabitMQ和ActiveMQ,kafka在性能上有很大的优势。
这里写图片描述
原因大致如下:
* Kafka不等待代理的确认,以代理能处理的最快速度发送消息。
* Kafka有更高效的存储格式。平均而言,Kafka每条消息有9字节的开销,而 ActiveMQ有144字节。其原因是JMS所需的沉重消息头,以及维护各种索引结构的开销。LinkedIn注意到ActiveMQ一个最忙的线程大部分时间都在存取B-Tree以维护消息元数据和状态。

参考链接:
http://www.infoq.com/cn/articles/apache-kafka

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值