走进消息队列和Kafka | 青训营笔记

89 阅读3分钟

其实在学校学习过程中没有接触过消息队列处理的的相关内容,这一次在字节课程中了解了工业界比较成熟的消息队列的底层原理、架构设计和一些高级特性,并终于认识了听过很多次的Kafka,真的是受益匪浅,消息队列中的一些高级特性对处理其他高并发的事情都有借鉴意义。下面开始介绍相关的一些知识啦。

消息队列(MQ)

消息队列(MQ),指保存消息的一个容器,本质是个队列。但这个队列需要支持高吞吐、高并发和高可用。消息队列用于解决因同一时段的消息过多、过大而导致的互联网场景包含:系统崩溃、服务处理能力有限、链路耗时长尾、日志如何处理……

业界消息队列对比

  • Kafka:分布式的、分区多副本的日志提交服务,在高吞吐场景下发挥较为出色。
  • RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实施场景中运用较广。
  • Pulsar:是下一代云原生分布式消息流平台,集消存储、轻量化函数计算为一体、采用存算分离的架构设计。
  • BMQ:和Pular架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群。

Kafka

Kafka常用于在搜索服务、直播服务、订单服务、支付服务等等中的日志信息、Metrics数据和用户行为等数据的高并发处理中。

如何使用Kafka

  1. 首先要创建一个Kafak集群。
  2. 需要在这个集群中创建一个Topic,并且设置好分片数量。
  3. 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法将一个Hello World消息发送出去
  4. 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Pull方法将收到刚才发的Hello World消息。

基本概念解释如下:

  • Topic:Kafka中的逻辑队列,每一个不同的业务场景就是一个不同的Topic,这个业务的所有数据都存储在这个Topic中。
  • Cluster:Kafka的物理集群,每个集群中可以创建多个不同的Topic。
  • Producer:消息的生产端,负责将业务消息发送到Topic中。
  • Consumer:消息的消费端,负责消费已发送到Topic中的消息。
  • Partition:通常Topic会有多个分片,不同的分片直接消息可以并发处理,这样可以提高单个Topic的吞吐。

Kafka中的高级特性和存在的问题

  1. 帮助Kafka提高吞吐或者稳定性的功能
  • Producer:批量发送、数据压缩 -Broker:顺序写、消息索引、零拷贝 -Consumer:Rebalance
  1. Kafak存在的问题
  • 运维成本高
  • 杜宇负载不均衡的场景,解决方案复杂
  • 没有自己的缓存,完全依赖于Page Cache
  • Controller和Cooidinator和Broker在同一进程中,大量的IO会造成性能下降。