Kafka的原理和应用分析及和RabbitMQ的对比

1. kafka是什么

Kafka 是一个分布式消息流处理平台,原本开发自 LinkedIn,用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。现在它已被多家公司作为多种类型的数据管道和消息系统使用1 2

作为一个消息处理平台,kafka主要有以下功能2

  • 发布和订阅数据流,类似于消息队列或企业级的消息分发系统
  • 以容错、持久化的方式存储数据流
  • 对数据流进行实时处理
  • 在多个系统或应用之间建立实时的数据流管道
  • 建立实时数据流应用,来对数据流传输和响应

kafka的功能示意图如图所示。
kafka的功能示意图

1.1 Topics

topics是一个分类,或者叫数据供给中心(feed),发布者生产数据到topics,消费者从topics消费数据。kafka的topics总是有多个消费者,即0个,1个,或多个。
kafka的功能示意图如图所示。
在这里插入图片描述

一个topic有多个分片(partition),每个分片是一个有序的数据序列,而且分片是持续增长的。分片中的每一条记录(record)有一个序号(offset),用来唯一标识该记录在分片中的位置。
Kafka集群使用一个可配置的时间周期来保存所有发布的记录,无论它们是否已经被消费。举个例子,如果保留策略设置的是两天,在数据记录发布后的两天内,它是可以被消费的,但两天后,它就会被丢弃以释放空间。

1.2 Producers 和 Consumers

生产者自己选择发布数据到相应的topics。生产者发布数据到Kafka集群的服务器(broker),一般来说,Kafka集群有多个broker,用来做负载均衡3。生产者发布数据也可以采取简单的循环方式进行负载均衡,也可以依据一定的分区策略(比如基于record中的key)。

由于broker本身是无状态的,所以需要Zookeeper来维护服务器的状态。Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册(naming)4。Kafka提供默认、简单的Zookeeper配置文件用于启动一个本地的Zookeeper实例5。Zookeeper通知生产者和消费者Kafka集群中新的服务器(broker)的出现或者某个服务器的失败。

在Kafka里把消费者按标签分成消费者组(consumer group),每一条发布到topic的记录被发送到一个消费者实例。消费者实例可以在不同的进程或不同的机器上。如果所有的消费者实例都在相同的组中,那么数据记录会以负载均衡的方式分配给消费者实例。如果消费者实例处在不同的组别中,每一个记录会被广播到所有的消费者组中的一个实例上2。如图所示。
消费者实例

2. Kafka的架构

下图展示了Kafka的整体架构。生产者发布消息到topic,每个topic又分成多个partition,每台服务器(broker)拥有0个或多个topic的partition。每个partition是一个有读写顺序的log文件,存储在硬盘上6

相比于传统的 发布/订阅 系统,Kafka中的消费者可以看做是一组合作的进程。topic

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值