消息队列 - kafka | 青训营笔记

73 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天.

Kafka

Kafka是一个高吞吐、分布式、基于发布订阅的消息系统,利用Kafka技术可以在廉价的PC Server上搭建起大规模消息系统。

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒。
  • 可扩展性:kafka集群支持热扩展。
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失。
  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)。
  • 高并发:支持数千个客户端同时读写。
  • 支持实时在线处理和离线处理:可以使用Storm这种实时流处理系统对消息进行实时进行处理,同时还可以使用Hadoop这种批处理系统进行离线处理。

如何使用Kafka

创建集群 ——> 新增Topic ——> 编写生产者逻辑 ——> 编写消费者逻辑。

基本概念

image.png

Topic:逻辑队列,不同的Topic可以建立不同的Topic。

Cluster:物理集群,每个集群中可以建立多个不同的Topic。

Producer:生产者,负责将业务消息发送到Topic中。

Consumer:消费者,负责消费Topic中的消息。

ComsumerGroup:消费者组,不同组Consumer消费进度互不干涉。

Topic内部

image.png

Offset:消息在partition内的相对位置信息,可以理解为唯一的ID,在partition内部严格递增。

image.png

每个分片有多个Replica,Leader Replica 将会从ISR中选出。

数据复制

image.png

重启操作

image.png

Kafka问题总结

  1. 运维成本高

2.对于负载不均衡的场景,解决方案复杂

3.没有自己的缓存,完全依赖 Page Cache

4.Controller 和 Coordinator 和Broker 在同一进程中,大量的IO会造成性能下降