Kafka架构设计

Kafka架构设计

Kafak核心概念

  • 生产者(Producer) : 生产数据,并存放在指定的主题中
  • 主题(topic) :类似于数据库中的表,按主题存储数据
  • 分区(partition) :一个主题可以按分区存储数据,默认数据只有一个分区,一般为创建topic时指定分区数。在磁盘上体现为目录不同
  • 消费者(consumer) : 消费存储在主题中的数据,数据是通过pull的方式,实现消费者消费数据,即消费者自己从topic中拉取
  • 消费者组(consumer group) : 一组消费者,消费同一的主题
  • Broker: 一个kafka节点称为一个Broker,集群内的BrokerID唯一
  • 副本(replica):一份数据有多个副本
  • 消息(message):存放的数据
  • 偏移量(offset):消息处理的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mi3M7Ghh-1611887754842)(./Kafka核心概念.png)]

Kafka高性能

  • 通过顺序写的方式实现kafka高性能的写
  • 通过零拷贝的方式实现Kafka高性能的读

num.network.threads = 9

num.io.threads = 32

  • kafka服务端的设计
    • 服务端如何处理请求
      • 使用NIO
      • 顺序读写
      • 跳表设计
      • 零拷贝
  • Producer设计
  • 批处理
  • 内存池设计
  • 封装同一服务器请求
  • ConsumerGroup设计
    • 同一个消费组是P2P方式,一个消息只能被同一个组的一个消费者消费
    • 不同组时订阅模式,一个消息可以被不同的消费组消费
    • 一个分区同一时间只会被同组一个消费者消费
  • Consumer设计-偏移量存储
    • 0.8以前存储在Zookeeper中,0.8以后存储在Kafka的_consumer_offset的主题中

Kafka的网络设计

​ 基于NIO的网络设计

​ 消息写入到磁盘之前首先放在一个MessageQueue中,再用多线程处理MessageQueue中

有多个Selector设计 	

​ 一个Acceptor,负责启动Kafka并监听应用

三个Processor负责接收请求

​ 一个RequestChanel封装RequestQueue负责接收请求

​ 一个KafkaRequestHandlerPool监听RequestChannel,当RequestChannle中有数据流入时,该进程负责处理数据,并最中放入磁盘。默认有8个线程进行数据处理

​ RequestChannle还封装三个ReposeChannle负责接收响应

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-scpTQnrQ-1611887754846)(服务端设计.png)]

Kafka架构思考

​ kafka是一个高性能,高并发,高可用的消息系统,分别通过以下设计实现上述特性

  • 高可用:通过副本机制保证了Kafka的高可用
  • 高并发:利用Java的NIO实现网络连接以及数据读写,并设计多Selector接受数据,多线程处理的设计方式保证高可用,可以通过修改制定参数定制化Selector的个数,以及处理数据的线程数。通过配置这两个参数可以提升吞吐量
  • 高性能:
    • 生产者
      • 顺序写的方式保证写高性能
      • 批量处理设计
    • 消费者
      • 零拷贝的方式读取数据
      • 索引,以及跳表的设计

猜你喜欢

转载自blog.csdn.net/guoqing2017/article/details/113371172
今日推荐