目录
一、简介
1.1 什么是kafka
①Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。
②Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。
③Kafka是一个分布式消息队列:生产者、消费者的功能。
④Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。Kafka具有高性能、高吞吐量的特点而被广泛应用于大数据传输场景(据说一秒钟能达到 几十万 数据量的处理)
1.2 主要特征
①通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
②高吞吐量 :即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
③支持通过Kafka服务器和消费机集群来分区消息。即支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输
④同时支持离线数据处理和实时数据处理。
④支持Hadoop并行数据加载
1.3 消息系统介绍
一个消息系统负责将数据从一个应用传递到另外一个应用,应用只需关注于数据,无需关注数据在两个或多个应用间是如何传递的。分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式。
1.4 点对点消息传递模式
在点对点消息系统中,消息持久化到一个队列中。此时,将有一个或多个消费者消费队列中的数据。但是一条消息只能被消费一次。当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序。这种架构描述示意图如下:
生产者发送一条消息到queue,只有一个消费者能收到。
1.5 发布-订阅消息传递模式
在发布-订阅消息系统中,消息被持久化到一个topic中。与点对点消息系统不同的是,消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除。在发布-订阅消息系统中,消息的生产者称为发布者,消费者称为订阅者。该模式的示例图如下:
发布者发送到topic的消息,只有订阅了topic的订阅者才会收到消息。
二、kafka中术语解释
2.1 broker
Kafka 集群包含一个或多个服务器,服务器节点称为broker。
broker存储topic的数据。如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。
如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储该topic的partition数据。
如果某topic有N个partition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致Kafka集群数据不均衡。
2.2 Topic
每条发布到kafka集群的消息都有一个类别,这个类别被称为Topic。
物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上,但用户只需指定消息的Topic即可生产或消费数据,而不必关心数据存于何处。
2.3 Partition
topic中的数据分割为一个或多个partition。
每个topic至少有一个partition。
每个partition中的数据使用多个segment文件存储。
partition中的数据是有序的,不同partition间的数据丢失了数据的顺序。
如果topic有多个partition,消费数据时就不能保证数据的顺序。
在需要严格保证消息的消费顺序的场景下,需要将partition数目设为1。
2.4 Producer
生产者即数据的发布者,该角色将消息发布到Kafka的topic中。
broker接收到生产者发送的消息后,broker将该消息追加到当前用于追加数据的segment文件中。
生产者发送的消息,存储到一个partition中,生产者也可以指定数据存储的partition。
2.5 Consumer
消费者可以从broker中读取数据。消费者可以消费多个topic中的数据。
END
参考资料:大佬博客