Kafka使用心得
1. Kafka简单理解
kafka是一个可靠的消息中间件,它的直接作用是将生产者和消费者进行解耦。和自己简单实现一个消息队列相比,kafuka具有可靠性、可扩展性、灵活性等优点。
可靠性:kafuka的消息会落盘,因此保证了消息不会被丢弃。
可扩展性:kafuka是一个分布式系统,很容易通过增加机器来进行水平扩展。
灵活性:kafuka的消息可以被多个消费者组进行消费,消息的终点很灵活。
2. Kafka框架
从图中能够看出Kafka包含了三个模块:生产者,消费者,存储节点。
2.1 生产者
生产者就是生产消息的部门,可以按照一定的规则将消息发送到存储节点。这部分接触不过,就不过多讲解。
2.2存储节点
这部分是kafka的核心,kafka的高可用、高性能在这里实现。相关的一些名词有:
topic:消息的类型
partition:消息存储的分区,一个topic可以具有多个partition,一般来说一个partition的数据量不宜过大,一台机器可以处理的过来。
offset:每条消息在partition的位置。offset是partition的属性,每个partition都有自己一套offset。
brokers:kafka的一个实例,其实可以认为是部署kafka的一台机器,但一台机器上也可能有多个broker,每个broker占用该机器的不同端口。
leader:leader是针对partition来说的,每个partition可以有多个备份,每个备份都分布在不同的broker上,其中有一个是leader,对partition中信息的读取是从leader进行读取的,其它broker和leader进行同步。
offset manager:offset的管理者,管理offset,可以通过offset manager对offset进行管理。
2.3消费者
消费者被称为消费组,每一组消费者之间是没有相互关系的。通过引入消费组,kafka支持多个消费组,kafka的数据可以有多个去处。当只有一个消费组的时候是点对点的消息通信,当有多个消费组的时候是广播形式的消息通信。
kafka的消费者在0.9.0版本之前两套API,分别是High Consumer API和Simple Consumer API。在0.9.0以后(包括)新增了Kafka Client接口,New一个Client就可以使用Client里的函数进行消费,非常方便。
(ps:0.8.2已经有了Client,但该Client里的Consumer有问题,不能使用,只有Product能用)。
3. Kafka缺点
Kafka的文档太乱,Kafka目前发展比较快,每个版本都会有非常多的功能发布,非常多的功能调整。因此,导致不同版本的学习成本增加,但幸好新版本会兼容老版本的接口。0.8版本之前,没有Client,只有API接口调用,之后才封装了Client。