一、kafka简介
Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
主要应用场景是:日志收集系统和消息系统。
Kafka主要设计目标如下:
-
以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
-
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
-
支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
-
同时支持离线数据处理和实时数据处理。
二、整体架构
如上图所示,kafka由3种角色组成:消费者(produce)、代理服务器(broker)、消费者(consumer)
-
Broker:每一台机器叫一个Broker,多个Broker组成一个Kafka集群
-
Producer:日志消息生产者,负责往集群中写数据
-
Consumer:消息的消费者,负责从集群中读数据
-
Consumer Group:每个Consumer属于一个特定的Consumer Group
-
Topic:不同消费者去指定的Topic中读,不同的生产者往不同的Topic中写
-
Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。
-
Message:日志消息,kafka集群内流通的基本单位
-
Segment:partition物理上由多个segment组成
-
Offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息。