Apache Kafka简介
提纲
简介
基本拓扑
主题和日志
分布
生产者、消费者
保证
用例
简介
Kafka是一种分布式的、分区的、复制分发的提交日志服务。它以一种独特的设计提供消息系统的功能。
名词定义:
Kafka使用“主题”(topics)来维护不同的消息分组
向主题发布消息的进程被称为“生产者”(producers)
订阅主题、处理被发布的消息的进程被称为“消费者”(consumers)
Kafka运行在由一个或多个服务器组成的集群上,每个服务器被称为一个“调度者”(broker)
基本拓扑
简单的说,生产者通过网络向Kafka集群发送消息,而后这些消息被提供给消费者使用,如下图:
客户端和服务器之间的通信使用的是一种简单、高性能、语言无关的TCP协议。Kafka开发团队提供了Java客户端,但其他各种语言的客户端也很多。
主题(Topics)和日志(Logs)
主题是Kafka消息发布的所在。Kafka为每个主题维护一个分区的日志结构,如图。
每个分区(partition)是一个提交日志。消息严格按照提交顺序被添加到分区中。该消息序列是不可修改的(只有写入,不存在修改、删除)。
每条消息都会被分配给一个在本分区内唯一的序号。这个序号被称为“偏移量”(offset)。
主题(Topics)和日志(Logs),续1
在配置允许的时间段内,Kafka集群保留所有被发布的消息,不论这些消息是否已经被消费过。
例如,如果日志存留期(log retention)被设置为2天,则一个消息在它被发布后的2天内都是可供反复消费的,2天后它会被丢弃以释放空间。
从数据尺寸方面讲,Kafka的性能是一个常量,所以不论存储多少消息都不是问题。
Kafka在每消费者级别上保存的元数据仅为消费者在日志中的offset,其值由消费者控制。一般消费者是沿着offset线性增长方向来消费消息,但它完全可以按照任意顺序访问任意offset。因此消费者可以任意加入和离开,对集群和集群上的其他消费者几乎不会有什么影响。
主题(Topics)和日志(Logs),续2
Kafka主题日志分区的目的:
允许数据任意增长,无视单一服务器处理能力的限制。每个单独的分区必须能够被负责它的服务器所容纳,但一个主题可以有任意多的分区,因此主题可以容纳任意量的数据。
实现并发性。后面我们展开论述并发性。
分布
分区的日志被分发到集群内的服务器上,每台服务器负责处理一些分区和对这些分区的读写请求。为满足容错需求,各分区的数据都按一个可配置的量被复制到集群的其他服务器上。
每个分区都有一个“领导”(leader)服务器和0到多个“追随者”(follower)服务器。领导服务器负责对这个分区的所有读写操作,而追随者服务器则被动的复制领导服务器。如果领导服务器宕机,其中一台追随者服务器会自动被选举为新领导。一个分区的领导服务器可能是另外几个分区的追随者服务器,所以总体上集群的负载是均衡的。
生产者
生产者(producer)向主题(topic)发布消息。生产者自身要负责决定把消息发布到主题中具体哪个分区(partition)。分区选择可以是简单的轮盘式(round-robin),也可以是基于某种语义分区功能(如根据消息中的某键值来运算目标分区编号)。
消费者
传统的消息系统有队列(queuing)和发布-订阅(publish-subscribe)两种模型。在队列模型中,一群消费者从一个队列中读取消息,每一消息仅被某一个消费者获取。在发布-订阅模型中,同一消息被广播到所有消费者。Kafka使用”消费组”(Consumer Group)来同时提供对二者的抽象。
同一个消费组中的消费者有相同的消费组名称。这些消费者可以是不同的进程,甚至是在不同的机器上。发布到主题中的一条消息,会被订阅这个主题的消费者组中的某一个消费者收到。
在这种模型下,如果有所消费者都属于同一组,就相当于队列模型;如果消费者的组名各不相同,就相当于发布-订阅。
Apache Kafka入门介绍 来自淘豆网m.daumloan.com转载请标明出处.