kafka 基本概念

  • 消息队列

1、什么是消息队列

消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。
消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。

2、消息队列的应用场景

应用耦合:多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败;

异步处理:多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间;

限流削峰:广泛应用于秒杀或抢购活动中,避免流量过大导致应用系统挂掉的情况;

消息驱动的系统:系统分为消息队列、消息生产者、消息消费者,生产者负责产生消息,消费者(可能有多个)负责对消息进行处理;

3、消息队列的两种模式

消息队列包括两种模式,点对点模式(point to point, queue)和发布/订阅模式(publish/subscribe,topic)

点对点:点对点模式下包括三个角色:消息队列、生产者、消费者

消息发送者生产消息发送到queue中,然后消息接收者从queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息接收者不可能消费到已经被消费的消息。

3.1、点对点模式特点:

每个消息只有一个接收者(Consumer)(即一旦被消费,消息就不再在消息队列中);

发送者和接发收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息;

接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息;

3.2、发布订阅模式

每个消息可以有多个订阅者;

发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。

为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行;

  • kafka是什么?

Kafka 是一个分布式,分区的,多副本的,多订阅者的消息发布订阅系统,由 LinkedIn 公司开发。以下是 Kafka 的一些相关知识:

1、优点

可靠性强(分布式-分区-副本)、扩展性强(可伸缩)、性能高(数据读写)、耐用性强(数据持久化)、时效性强。

2、缺点

由于是批量发送,数据并非真正的实时; 仅支持统一分区内消息有序,无法实现全局消息有序; 有可能消息重复消费; 依赖zookeeper进行元数据管理。

kafka重要概念

  • Topic:Kafka 中的消息被组织成主题(topic),生产者将消息发布到特定的主题,消费者从感兴趣的主题订阅消息。

  • Partition:每个主题(topic)可以被分成多个分区(partition),每个分区是一个有序的消息队列,生产者将消息发送到某个特定的分区,每个分区可以分布在不同的服务器上以实现负载均衡、容错等目的。

  • Broker:Kafka 集群中的每个节点称为 broker,每个 broker 可以承载多个分区(partition),每个分区(partition)可能被分配到不同的 broker 上。

  • Producer:消息的生产者,可以将消息发布到特定主题(topic)的某个分区(partition)。

  • Consumer:消息的消费者,可以从某个主题(topic)的某个分区(partition)订阅消息。

  • Consumer Group:若干个消费者可以组成一个消费者组(consumer group),共同消费某个主题(topic)的所有消息。每个分区(partition)只能由同一个 consumer group 中的一个消费者消费。

  • Offset:Kafka 中的每条消息都有一个唯一的偏移量(offset),代表该消息在分区(partition)中的位置。每个消费者都有自己的 offset 计数器,可以指定从哪个 offset 开始读取消息。

  • Replication:Kafka 支持数据备份和容错机制,每个分区(partition)可以有多个副本(replica),这些副本分布在不同的 broker 上,以保证某一个 broker 宕机时数据不会丢失。

副本

在kafka 中, 副本和正本都被称之为副本,但存在leader 和follower之分,活跃的称之为leader,其它的为follower, topic、partition、replica的关系:消息进来的时候首先存入leader replica,然后从leader replica中复制到其它的follower replica, 只有当复制全部完成的时候,consumer才可以消费此条消息,这样的措施的目的是为了意外发生的时候,数据可以恢复,consumer的消费也是从leader replica中获取的。

概念要点补充

  1. 一个partition只能被同组的一个consumer消费
  2. 同一个组里的一个consumer可以消费多个partition
  3. 消费效率最高的情况是partition和consumer 的数量相同,这样可以确保每个consumer可以专职负责一个partition
  4. consumerd的数量不能多余partition的数量,当consumer的数量大于partition时,就会有consumer闲置
  5. consumer可以认为是一个订阅者的集群,其中的每个consumer负责自己所消费的分区

参考资料

1、https://www.cnblogs.com/itlz/p/15470456.html

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐