Kafka(1)-初识Kafka

Kafka是一款高性能的分布式消息系统,最初由LinkedIn设计,用于处理大规模的流数据。它支持发布订阅模式,常用于日志收集、行为追踪等场景。Kafka的特点包括高吞吐量、内置分区、冗余和容错性。其架构包含Producer、Broker、Consumer和Zookeeper,Producer使用push模式发布消息,Consumer使用pull模式消费。在安装配置过程中,Kafka依赖Zookeeper,并支持水平扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

消息中间件的背景介绍

消息中间件能够解决的问题

异步

image-20200910095306840

​ 很多业务场景我们需要把同步的任务变成异步的任务。

​ 拿一个电商平台的注册功能来简单分析下,用 户注册这一个服务,不单单只是insert一条数据到数据库里面就完事了,还需要发送激活邮件、发送新人红包或者积分、发送营销短信等一系列操作。假如说这里面的每一个操作,都需要消耗1s,那么整个注册过程就需要耗时4s才能响应给用户。

​ 那么我们需要把这些操作拆出来,优化变成异步处理的逻辑。

  • 我们可以使用阻塞队列+线程池来实现生产者消费者模式。
    • 但是这种方式只适用于单机,一旦机器宕机,那么原来在阻塞队列中存储的数据内容就丢失了。
  • 使用消息中间件来处理

削峰

​ 用户提交过来的请求,先写入到消息队列。消息队列是有长度的,如果消息队列长度超过指定长度, 直接抛弃。这样就把流量的峰值削掉了。

限流

​ 秒杀的具体核心处理业务,接收消息队列中消息进行处理,这里的消息处理能力取决于消费端本身的 吞吐量

解耦

​ 不同程序语言之间可以通过消息队列来达到通信。

消息持久化

​ 能够不用担心应用程序挂了而无法消费消息

​ 当然,消息中间件还有更多应用场景,比如在弱一致性事务模型中,可以采用分布式消息队列的实现最 大能力通知方式来实现数据的最终一致性等等

思考消息中间件的设计

可以先从基本的需求开始思考

  • 最基本支持消息的收发
    • 网络通信就会考虑NIO
  • 消息的存储
    • 持久化,非持久化
  • 消息的序列化,反序列化
  • 是否跨语言
  • 消息的确认机制
    • 如何避免消息的重发

高级功能

  • 消息的有序性
  • 是否支持事物消息
  • 消息收发的性能,对高并发大数据的支持
  • 是否支持集群
  • 消息的可靠性传输
  • 是否支持多协议

消息中间件的发展过程

​ 实际上消息中间件的发展也是挺有意思的,我们知道任何一个技术的出现都是为了解决实际问题,这个 问题是 通过一种通用的软件总线也就是一种通信系统,解决应用程序之间繁重的信息通信工作。

​ 最早的小白鼠就是金融交易领域,因为在当时这个领域中,交易员需要通过不同的终端完成交易,每台终端显示不同的信息。

​ 如果接入消息总线,那么交易员只需要在一台终端上操作,然后订阅其他终端感兴趣 的消息。于是就诞生了发布订阅模型(pubsub),同时诞生了世界上第一个现代消息队列软件(TIB) The information Bus, TIB允许开发者建立一系列规则去描述消息内容,只要消息按照这些规则发布出 去,任何消费者应用都能订阅感兴趣的消息。

​ 随着TIB带来的甜头被广泛应用在各大领域,IBM也开始研 究开发自己的消息中间件,3年后IBM的消息队列IBM MQ产品系列发布,之后的一段时间MQ系列进化 成了WebSphere MQ