Kafka基本介绍
一、背景
1、Why Kafka
以ActiveMQ为例,和Kafka同属于Apache,发展前景都十分被看好。但两种的设计目标却各有侧重。ActiveMQ可以支持多种协议、事务等,但在吞吐量上,他的Forwarding Bridge机制一直被很多人吐槽。但Kafka侧重点在大数据、分布式应用,他可以支持动态扩容(通过zk)。
Kafka是为分布式而生的,他主要来应对庞大的活动流数据。因此,强大的吞吐量是更重要的,为此,砍掉了很多复杂特性:如事务、分发策略等。
2、是什么
Kafka是一个高吞吐量的分布式发布订阅消息系统,也可以叫做分布式消息中间件。
二、相关概念
1、AMQP
Advanced Message Queuing Protocol 高级消息协议,是一种应用层协议的开放标准。
作为一种协议,他提供的是一种标准、规范或者叫模型。为的是提供一种全行业广泛使用的标准中间件技术,来降低企业应用的开销。
2、Topic & Partition
Topic可以看作消息的分类,我们可以将一类业务划分为一个Topic。每个Topic中由一个或多个Partition。Partition是最小单位,类似一个FIFO队列。
如图:每个broker类似一个Server。
3、Consumer Group
传统的消息中间件至少提供两种消息模型:点对点、发布订阅模型。但Kafka提出了消费者组的概念,来实现这两种模型。
规则是:一个消息可以被多个消费者消费,但只能被一个消费者组里的一个消费者消费。
听起来有点绕,直接上图。比如Server1中的P0消息,他可以被C1、C3消费,因为他们分属不同的Consumer Group。其他的消息也是如此。
在同一个Consumer Group中,Kafka实现了点对点模型。
在不同的Group中,又实现了发布订阅模型。
三、特性
1、push vs pull
在消息系统中,发送消息的方式主要有push和pull两种。push是指直接将消息推送到用户,pull正好相反,需要消费者自己获取。
pull方法,消费者比较麻烦,需要自己拿,通常会定时拉取,可能消息推送不及时。push方法对于消费者(用户)来说,就便利很多了,他不需要你实时关注变化。
2、Replication
Kafka的副本设计是一大亮点,目的是为了保持更强的持久性和高可用性。自动的副本管理可以保证即使在某台服务器发生故障后,也不会造成数据丢失和服务不可用。