kafka简介

This commit is contained in:
luoxiang 2019-06-04 06:20:54 +08:00
parent 8585d599a4
commit 20c9100a0c

View File

@ -15,10 +15,10 @@
ApacheKafka是一个分布式的流处理平台。它具有以下特点 ApacheKafka是一个分布式的流处理平台。它具有以下特点
+ 支持消息的发布和订阅类似于RabbtMQ、ActiveMQ等消息队列 + 支持消息的发布和订阅类似于RabbtMQ、ActiveMQ等消息队列
+ 支持消息的持久化存储,并通过多副本分布式的存储方案来保证消息的容错;
+ 支持数据实时处理; + 支持数据实时处理;
+ 高吞吐率单broker可以轻松处理数千个分区以及每秒百万级的消息量 + 能保证消息的可靠性投递;
+ 能保证消息的可靠性投递。 + 支持消息的持久化存储,并通过多副本分布式的存储方案来保证消息的容错;
+ 高吞吐率单Broker可以轻松处理数千个分区以及每秒百万级的消息量。
## 二、基本概念 ## 二、基本概念
@ -28,9 +28,7 @@ Kafka的基本数据单元被称为message(消息),为减少网络开销,提
### 2.2 Topics And Partitions ### 2.2 Topics And Partitions
Kafka的消息通过Topics(主题)进行分类可以把Topics理解为关系型数据库中的表。一个主题可以被分为若干个Partitions(分区),一个分区就是一个提交日志(commit log)。 Kafka的消息通过Topics(主题)进行分类一个主题可以被分为若干个Partitions(分区),一个分区就是一个提交日志(commit log)。消息以追加的方式写入分区然后以先入先出的顺序读取。Kafka通过分区来实现数据的冗余和伸缩性分区可以分布在不同的服务器上这意味着一个Topic可以横跨多个服务器以提供比单个服务器更强大的性能。
消息以追加的方式写入分区然后以先入先出的顺序读取。Kafka通过分区来实现数据的冗余和伸缩性分区可以分布在不同的服务器上这意味着一个Topic可以横跨多个服务器以提供比单个服务器更强大的性能。
由于一个Topic包含多个分区因此无法在整个Topic范围内保证消息的顺序性但可以保证消息在单个分区内的顺序性。 由于一个Topic包含多个分区因此无法在整个Topic范围内保证消息的顺序性但可以保证消息在单个分区内的顺序性。
@ -40,13 +38,11 @@ Kafka的消息通过Topics(主题)进行分类可以把Topics理解为关系
#### 1. 生产者 #### 1. 生产者
生产者负责创建消息。一般情况下,生产者在把消息均衡地分布到在主题的所有分区上,而并不关心消息会被写到哪个分区。如果我们想要把消息写到指定的分区,通过分区器对消息键进行散列来实现。 生产者负责创建消息。一般情况下,生产者在把消息均衡地分布到在主题的所有分区上,而并不关心消息会被写到哪个分区。如果我们想要把消息写到指定的分区,可以通过自定义分区器来实现。
#### 2. 消费者 #### 2. 消费者
消费者是消费者群组的一部分,消费者负责消费消息。消费者可以订阅一个或者多个主题,并按照消息生成的顺序来读取它们。消费者通过检查消息的偏移量(offset)来区分读取过的消息。 消费者是消费者群组的一部分,消费者负责消费消息。消费者可以订阅一个或者多个主题,并按照消息生成的顺序来读取它们。消费者通过检查消息的偏移量(offset)来区分读取过的消息。偏移量是一个不断递增的数值在创建消息时Kafka会把它添加到其中在给定的分区里每个消息的偏移量都是唯一的。消费者把每个分区最后读取的偏移量保存在Zookeeper或Kafka上如果消费者关闭或者重启它还可以重新获取该偏移量以保证读取状态不会丢失。
偏移量是一个不断递增的数值在创建消息时Kafka会把它添加到其中在给定的分区里每个消息的偏移量都是唯一的。消费者把每个分区最后读取的偏移量保存在Zookeeper或Kafka上如果消费者关闭或者重启它还可以重新获取该偏移量以保证读取状态不会丢失。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/kafka-producer-consumer.png"/> </div> <div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/kafka-producer-consumer.png"/> </div>
@ -56,11 +52,11 @@ Kafka的消息通过Topics(主题)进行分类可以把Topics理解为关系
### 2.4 Brokers And Clusters ### 2.4 Brokers And Clusters
一个独立的kafka服务器被称为broker。broker 接收来自生产者的消息为消息设置偏移量并提交消息到磁盘保存。broker为消费者提供服务对读取分区的请求做出响应返回已经提交到磁盘的消息。 一个独立的kafka服务器被称为Broker。Broker 接收来自生产者的消息为消息设置偏移量并提交消息到磁盘保存。Broker为消费者提供服务对读取分区的请求做出响应返回已经提交到磁盘的消息。
broker是集群(Cluster)的组成部分。每一个集群都有一个broker同时充当了集群控制器(controller)的角色(自动从集群的活跃成员中选举出来)控制器负责管理工作包括将分区分配给broker和监控broker。 Broker是集群(Cluster)的组成部分。每一个集群都会选举出一个Broker作为集群控制器(Controller)集群控制器负责管理工作包括将分区分配给Broker和监控Broker。
在集群中,一个分区(Partition)从属一个broker,该broker被称为分区的首领(Leader)。一个分区可以分配给多个broker,这个时候会发生分区复制。这种复制机制为分区提供了消息冗余,如果有一个broker失效其他broker可以接管领导权。 在集群中,一个分区(Partition)从属一个Broker该Broker被称为分区的首领(Leader)。一个分区可以分配给多个Brokers这个时候会发生分区复制。这种复制机制为分区提供了消息冗余,如果有一个Broker失效其他Broker可以接管领导权。
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/kafka-cluster.png"/> </div> <div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/kafka-cluster.png"/> </div>