【大数据技术】kafka简介和底层实现

2020-12-15  本文已影响0人  江澈_SIMON

一、Kafka的三大组件:Producer、Server、Consumer

 

1、Kafka的Producer写入消息

producer采用push(推)模式将消息发布到broker,每条消息,都被追加到分区中(顺序写到磁盘,比随机写内存效率高)。

kafka单partition的写入的流程  

· 分区的作用:方便容量扩展,可以多并发读写数据,所以我们会指定多个分区进行数据存储。

· 一般根据 event_key的hash  % numPartitions来确定写入哪个分区,如果写入时没有指定key,则轮询写入每个分区;因此导致每个partition中消息是有序的,整体无序。

kafka多partition的写入的流程  

每条event数据写入partitionA中,并且只会写入partitionA_leader,当partitionA_leader写入完成后partitionA_flower节点再去partitionA_leader上异步拉取数据;默认ack为1,表示不会等待partitionA_flowers写入完成;如果设置ack为副本数或ack=-1,则等待副本全部写完,再写入下一条数据。


2、kafka的broker——保存消息

1、 创建topic,并指定分区和副本数

2、每个分区(partition)有一个leader,多个follower,pull数据时先寻找leader,只会读leader上的数据,leader和follower不会在一个节点上,leader节点宕机后,其中一个follower变成leader

3、 消息数据存在每个分区中,默认配置每条消息保存7天 或 分区达到1GB 后删除数据


3、Kafka的Consumer消费数据:

1、consumer采用pull(拉)模式从broker中读取数据。

2、如果一个消费者来消费同一个topic下不同分区的数据,会读完一个分区再读下一个分区

生产者(producer)API只有一套;  但是消费者(consumer)API有两套(高级API和低级API

一、高级API:

Zookeeper管理offset(默认从最后一个开始读新数据,可以配置从开头读)

kafka server(kafka服务)管理分区、副本

二、低级API:

开发者自己控制offset,想从哪里读就从哪里读

// SimpleConsumer是Kafka用来读数据的类

// 通过send()方法获取元数据找到leader

TopicMetadataResponse metadataResponse = simpleConsumer.send(request);  //通过metadataResponse获取topic元数据,在获取topic中每个分区的元数据

// fetch 抓取数据

FetchResponse response = simpleConsumer.fetch(fetchRequest);

// 解析抓取到的数据

ByteBufferMessageSet messageAndOffsets = response.messageSet(topic, partition);


二、数据、broker状态,consumer状态的存储

一、在本地存储原始消息数据:

1、hash取模得分区、kafka中每条消息有一个Key,用来确定 每条数据存储到哪个分区中

2、轮询

3、自定义分区

first主题(topic)的第0分区的数据格式  

二、在zookeeper存储kafka的元数据

first_topic的某个partition在zookeeper上的数据, 对应下图   kafka元数据的目录结构图

三、存储consumer的offset数据

每个consumer有一个Key(broker+Topic+partition)的hash,再取模后 用来确定offset存到哪个系统文件中,Value是partitionMetaData。

1、使用zookeeper启动,zookeeper来存储offset

消费者 消费消息时,offset(消费到的下标)会保存在consumer本地和zookeeper中(由本地上传到zookeeper中,所以本地会保存offset)

使用zookeeper存储offset,对应下图 kafka元数据的目录/consumer结构图

2、使用bootstrap启动,本地存储offset(在本地可以减少两节点交互),zookeeper存储其他数据

按consumer线程的序号对50取模,存到不同分区中

三、某Flume对接Kafka案例

某Flume对接Kafka案例
上一篇下一篇

猜你喜欢

热点阅读