大数据之Kafka

优点

高吞吐

  • Kafka可以轻松处理巨大的消息流
  • 在处理大量数据的同时,它还能保证亚秒级的消息延迟

多个生产者

  • Kafka可以无缝支持多个生产者,不管客户端消费的是单个Topic还是多个Topic。

多个消费者

  • 多个消费者从一个单独的消息流读取数据,而且消费者之间互不影响。

基于磁盘的数据保留

  • 消息会被提交到磁盘,并根据设置的保留策略进行保存。(历史消息非常利于排查问题)
  • 3.0支持分层存储,本地存储层和远程存储层(HDFS/S3)

伸缩性

  • 扩缩容简单。

概念

这里就不提消费者和生产者了。

Topic

主题。
kafka的每个队列有个名字可以将不同数据放到不同的topic进行分治

Group

消费者组。
消费者在消费时,指定消费者组进行消费,消费者组会保存此次消费到那个位置
下次消费可以通过消费者组,从上次指定的位置继续消费。

Partition

分区。
能够将单个队列分成多个分区,提高吞吐量。
比如十个分区,就可以用十个消费者,或者生产者进行读写并且互不影响。

Offset

偏移量。
存储数据消费的进度
比如1-100,当前消费者组消费了99条,那么offset在99且剩余1条。

Broker

节点名称。
每个节点将会有个Broker。

Controller

选举出来的进行选举的控制器。

设计亮点

顺序读写

在磁盘上,数据分布得如果到处都是,在寻址上,肯定会消耗大量性能。
所以kafka每个partition的数据,都是采用追加的方式,减少了寻址过程。

存储结构

kafka存储数据主要是三类文件。

  • .log
  • .index
  • .timeindex
    每个topic的partition文件夹下,都有大量的这种文件。
    .log
    主要存储数据的文件,包含多个BranchRecord。
    一个BranchRecord包含多个Record(单条消息)和这个Branch的offset信息。

.index
存储 (key: offset , value: position) 根据偏移量生成对应position数据的稀疏索引文件。
能够快速通过offset找到对应patition的.log文件。

.timeindex
存储(key:timestamp, value:offset) 存储了消息写入事件和偏移量。

segment
在大量数据写入后,日志文件达到了分段分裂的配置大小,将会分裂成两套(offset.log+offset.index+offset.timeindex)文件。

在消费时

  1. 通过group从zk或者broker获取offset信息
  2. leader通过offset获取对应段位置
  3. 通过段获取.index文件中的稀疏索引
  4. 用稀疏索引找到.log消息具体位置

零拷贝

sendFile

DMA(Direct Memory Access)

内存直接访问。

分区

新控制器KRaft

2021年9月发布的Kafka 3.0包含了它的第一个生产版本,Kafka集群既可以使用基于ZooKeeper的传统控制器,也可以使用KRaft。

  • 不依赖于zookeeper,减少维护和学习成本。
  • 解决broker和zookeeper中元数据和offset不一致问题
  • zookeeper不再成为kafka多分区扩容的性能瓶颈

你可能感兴趣的:(大数据之Kafka)