Kafka

Kafka介绍

客户端消费队列中的数据有两种方式:

1、发布/订阅模式,数据生产之后,推给所有订阅者

2、点对点模式,消费者主动拉取生产后的数据

消息队列优点

1、解耦

2、冗余

3、扩展性

4、灵活性和峰值处理能力

5、可恢复性

6、顺序保证(Kafka保证1个partition内数据有序)

7、缓冲

8、异步通信

Kafka基本术语

1、依赖zookeeper管理元数据

2、Producer:消息生产者,向Kafka broker发送消息

3、Consumer:消息消费者,向Kafka broker拉取消息

4、Topic:可以理解是一个队列,一个topic里有很多个partition

5、Consumer group:Kafka用来实现topic广播和单播的手段,

广播实现方法:只要每个consumer有一个独立的CG就行了

单播实现方法:只要所有的consumer在同一个CG

6、Broker:一台Kafka服务器就是一个broker,一个集群由多个broker组成,一个broker可以容纳多个topic

7、partition:一个非常大的topic可以分布在多个broker上,一个topic可以分成多个partition,每个partition是一个有序队列,partition中的每条消息都会被分配一个有序的ID,Kafka只保证一个partition中的消息按顺序发给consumer,不保证一个topic(多个partition)全局的消息顺序

Kafka工作流程

Kafka生产过程

1、producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(partition)中,属于顺序写磁盘,效率比随机写内存要高,保障Kafka吞吐率

2、分区:消息发送时都被发送到一个topic,其本质是一个目录,topic是由一些partition logs(分区日志)组成,每个partition中的消息都是有序的,生产的消息被不断追加到partition log上,每一条消息都被赋予了一个唯一的offset值

Kafka分区原因

1、方便在集群扩展,每个partition可以通过调整以适应它所在的机器,一个topic可以由多个partition组成,整个集群可以适应任意大小的数据

2、提高并发,以partition为单位进行读写

Kafka分区原则

1、指定了partition,直接使用

2、未指定partition指定了key,通过对key的value进行hash出一个partition

3、partition和key都未指定,使用轮询选出一个partition

Kafka副本

同一个partition可能会有多个replication,没有副本的情况下,一旦broker宕机,partition上所有数据都不可被消费,同时producer也不能再将数据存于其上的partition

Broker保存消息

1、存储方式

物理上把topic分成一个或多个partition,每个partition物理上对应一个文件夹,该文件夹存储该partition的所有消息和索引文件

2、存储策略

无论消息是否被消费,Kafka都会保留所有消息,有两种策略可以删除旧数据:

1、基于时间:log.retention.hours=168

2、基于大小:log.retention.bytes=1000000000

Kafka读取特定消息与文件大小无关,删除过期文件与提高Kafka性能无关

Kafka消费过程

高级API优点

1、高级API写起来简单

2、不需要自行管理offset,系统通过zookeeper自行管理

3、不需要管理分区、副本,系统自动管理

4、消费者断线会自动根据上一次记录,在zookeeper中的offset去接着获取数据,默认设置1分钟更新一下zookeeper中存的offset

5、可以使用group来区分对同一个topic的不同程序访问分离开来,不同的group记录不同的offset,这样不同程序读取同一个topic才不会因为offset互相影响

高级API缺点

1、不能细化控制如分区、副本、zookeeper等

2、不能自行控制offset,对于某些特殊需求来说

Kafka优点

1、发布订阅模式,支持多个生产者、消费者,一个消费者支持多个主题的消费

2、基于磁盘实现数据持久化,支持broker横向扩展

3、Kafka副本集机制,实现数据冗余,保障数据尽量不丢失

4、通过topic对消息进行分类

5、通过分批发送压缩的方式,减少网络数据传输开销,提升数据吞吐量

6、支持多种模式的消息(schema)

7、高性能处理消息,在处理大量数据的情况下,保证亚秒级的消息延迟

8、对cpu和内存消耗较小,网络开销相对较小

9、支持跨数据中心的消息复制,支持镜像集群

Kafka缺点

1、由于是批量发送,数据并非是真正的实时

2、不支持mqtt协议,不支持物联网传感数据直接接入

3、仅支持统一分区内消息有序,无法实现全局消息有序

4、监控不完善,需要安装插件,依赖zookeeper进行元数据管理

Kafka消息保留策略

要么保留一定时间,要么保留到消息达到一定大小的字节数。

分区被分为若干个片段,默认情况下,每个片段包含1G或者1周的数据,以较小的那个为准。在broker往leader分区写入消息时,如果达到片段上限,就关闭当前文件,并打开一个新文件。当前正在写入数据的片段叫活跃片段。当所有片段被写满时,会清除下一个分区片段的数据,如果配置的是7个片段,每天打开一个新片段,就会删除一个最老的片段,循环使用所有片段。

浙ICP备11005866号-8