Kafla 学习(一)初始学习kafla

发布与订阅消息系统

  • 在了解发布与订阅系统之前,我们需要了解一下需求场景,知道为什么会出现这个系统?
    • 在传统的客户端与服务器模型中,客户端与服务器之间的通信是直接的,客户端只需要知道服务器的IP和端口,才能发送请求。这种模型没有什么问题,但是有个弊端,就是会导致系统紧密耦合,这对于系统的可扩展性和可靠性造成影响。
    • 而加入发布与订阅系统,就可以解耦,客户端只需要发布消息,服务端只需要从系统中获取请求,再处理返回给客户端

什么是发布与订阅消息系统

  • 发布与订阅系统(Publish-Subscribe System)是一种消息传递模型,用于在分布式系统中传递消息。在发布与订阅系统中,消息的发送者(发布者)不会直接将消息发送给接收者(订阅者),而是将消息发送到中间件(消息代理或消息队列),由中间件负责将消息传递给一个或多个感兴趣的接收者。

Kafla

  • Kafka 就是发布与订阅系统,官网的介绍(Kafka 是一个分布式系统,由通过高性能TCP 网络协议进行通信的服务器和客户端组成。它可以部署在本地和云环境中的裸机硬件、虚拟机和容器上。),下面我们通过一些概念,具体来了解kafka

生产者和消费者

  • 既然是发布与订阅系统,那我们肯定要了解发布与订阅模式。
  • 简介:是一种常见的消息传递模式
  • 作用:实现解耦,灵活和可扩展的消息传递
  • 组成:
    • 发布者:将消息发布在指定的主题中
    • 订阅者:订阅感兴趣的主题,接收相应的消息
    • 主题:定义了一组相关的消息类型,发布者可以将消息发布到指定的主题中,订阅者可以订阅感兴趣的主题
  • 例子:假设有一个在线新闻网站,用户可以注册并订阅感兴趣的新闻主题,例如体育、科技、娱乐等。当有新的新闻发布时,网站会将新闻发布到相应的主题中,订阅了该主题的用户会收到相应的新闻推送。这个例子中,新闻网站是发布者,用户是订阅者,新闻主题是主题。
    • 具体地,整个流程可以分为以下步骤:
      • 用户注册并订阅感兴趣的新闻主题,例如体育、科技、娱乐等。
      • 新闻网站发布新闻到相应的主题中,例如体育新闻发布到体育主题中。
      • 订阅了该主题的用户会收到相应的新闻推送,例如订阅了体育主题的用户会收到体育新闻推送。
    • 在这个例子中,发布者(新闻网站)将消息(新闻)发布到指定的主题(新闻主题)中,订阅者(用户)订阅感兴趣的主题(体育、科技、娱乐等),接收相应的消息(新闻推送)。通过发布和订阅模式,新闻网站可以实现解耦、灵活和可扩展的新闻推送,用户可以自由选择感兴趣的主题,接收相应的新闻推送。

消息和批次

  • 知道了发布与订阅模式之后,我们知道除了角色之后,还有个很重要的东西需要了解,就是消息
  • 消息在kafka中就是数据单元,是指需要传递和处理的数据单元,通常包括一个key (键)和 value (值),键和值都是字节数组,可以持久化存储,可以被多个消费者消费,也可以被多个生产者发送
  • 但是发布者在发布的消息可能很小,也可能很大,那我们需要对大的数据进行分批次处理,所以跟消息绑定的还有一个概念叫批次
  • 批次是一组消息的集合,大小是可以设置的,通常为几千和几万条消息,作用是可以有效地减少网络的传输和磁盘写入的开销,从而提高消息处理的吞吐量和效率

主题和分区

  • 知道了发布者和订阅者是如何通过消息进行发布和订阅的,我们还需要知道消息是如何存储到系统中的,这个时候就需要引入两个概念,主题和分区
  • 主题:是对消息的分类和归类,发布者将消息发送到对应的主题中,然后订阅者在对应的主题中订阅消息,这样方便管理和使用
  • 主题的消息可能很多,所以我们还需要对单个主题进行分区
  • 分区:是主题的一个子集,是一个有序的消息序列,每个分区在物理上都是独立的日志文件,可以支持单独的读写和复制,分区的数量是可配置的,通常为主题的总数的若干倍。
  • 这么说可能不形象,举个例子:
    • 假设有一个在线电商网站,需要处理用户的订单信息。为了方便管理和查询,网站将订单信息发送到 Kafka 中的一个名为“orders”的主题中。为了提高消息的处理效率和可靠性,网站将“orders”主题分为多个分区,每个分区都是一个有序的消息序列,可以独立读写和复制。
    • 具体地,整个流程可以分为以下步骤:
      • 生产者将订单信息发送到“orders”主题中。
      • Kafka 将订单信息写入“orders”主题对应的分区中。
      • 消费者从“orders”主题中消费订单信息,可以同时从多个分区中消费。
      • 如果一个分区无法处理更多的消息,可以通过增加分区的数量来扩展处理能力。
    • 在这个例子中,“orders”主题是一个逻辑的概念,用于归类和管理订单信息。分区是主题的一个子集,用于实现消息的并发处理和高可用性。通过主题和分区的使用,网站可以方便地管理和查询订单信息,同时也可以提高消息的处理效率和可靠性。

为什么选择Kafla

  • 上面简单介绍了一下kafka,但是这种发布与订阅的系统这么多,为什么要选择kafka呢?kafka有什么优势呢?
    • 可以支持多个生产者:
    • 可以支持多个消费者:一个消息可以给多个消费者消费,并且每个消费者只能消费一次
    • 数据持久化存储和数据保障:允许消费者非实时的读取消息,因为消息会存到磁盘中,持久化数据可以保证数据不会丢失
    • 可扩展性和高可用性:
  • 那kafka 适用于那些场景
    • Kafka 适用于以下场景:
      • 大数据处理和分析:Kafka 可以处理大量的数据流,支持实时处理和批处理,适用于大数据处理和分析场景。
      • 实时数据传输和处理:Kafka 可以支持高吞吐量和低延迟的数据传输和处理,适用于实时数据传输和处理场景。
      • 日志收集和分析:Kafka 可以作为日志收集和分析的中间件,支持实时的日志传输和处理,适用于日志收集和分析场景。
      • 消息队列和通信中间件:Kafka 可以作为消息队列和通信中间件,支持高并发、高吞吐量的消息传递和处理,适用于消息队列和通信中间件场景。
      • 分布式应用和微服务:Kafka 可以作为分布式应用和微服务的消息传递机制,支持分布式应用和微服务之间的通信和协作,适用于分布式应用和微服务场景。

你可能感兴趣的:(Kafka,学习,kafka,java)