有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top
Kafka是什么?
一句话概括:「Apache Kafka 是一款开源的消息引擎系统」
什么是消息引擎系统?
消息引擎系统(Message Broker System)是一种中间件软件或服务,用于在分布式系统中进行异步消息传递。它提供了可靠的消息传输、消息路由和消息处理的功能,使不同的应用程序和组件能够通过发送和接收消息进行通信。
消息引擎系统通常由以下几个核心组件组成:
- 发布者(Publisher):负责将消息发布到消息引擎系统中。发布者将消息发送到指定的主题(Topic)或队列(Queue)中。
- 订阅者(Subscriber):订阅者可以通过订阅特定的主题或队列来接收消息。订阅者可以按照自己的需求选择订阅的消息类型和主题。
- 主题/队列(Topic/Queue):主题或队列是消息的目的地,消息发布者将消息发送到特定的主题或队列,而订阅者可以从中接收相应的消息。
- 消息路由(Message Routing):消息引擎系统负责将消息路由到正确的订阅者。它根据订阅者的订阅关系和消息的标识(如主题、标签等)来确定消息的路由方式。
- 消息持久化(Message Persistence):消息引擎系统通常会将消息持久化到存储介质中,以确保消息的可靠性和持久性。这样即使在系统故障或重启后,消息仍然可以被正确地传递和处理。
- 消息传递模式(Message Delivery Patterns):消息引擎系统支持多种消息传递模式,如点对点模式(Point-to-Point)、发布/订阅模式(Publish/Subscribe)、请求/响应模式(Request/Response)等,以满足不同的通信需求。
消息引擎系统具有解耦性、可靠性和扩展性等优点,使得分布式系统中的不同组件能够进行异步通信,提高系统的可靠性、可伸缩性和性能。常见的消息引擎系统包括Apache Kafka、RabbitMQ、ActiveMQ等。
为什么要引入消息引擎呢?直接A发送给B不好吗?
引入消息引擎系统的主要目的是解耦和提高系统的可伸缩性、可靠性和性能。下面是一些使用消息引擎系统的优点:
- 「解耦性」:通过引入消息引擎系统,发送者和接收者之间可以解耦。发送者只需要将消息发送到消息引擎中的特定主题或队列,而不需要直接知道接收者的详细信息。接收者可以根据自己的需求选择订阅相应的主题或队列来接收消息。这种解耦可以使系统的组件可以独立演化和扩展,避免了紧耦合的依赖关系。
- 「异步通信」:消息引擎系统支持异步通信模式,发送者可以将消息发送到消息引擎中后立即返回,而不需要等待接收者的响应。这种异步通信模式可以提高系统的响应速度和并发处理能力,使得发送者和接收者可以独立地进行任务处理,提高系统的整体性能和吞吐量。
- 「可靠性」:消息引擎系统通常会将消息持久化到存储介质中,以确保消息的可靠性和持久性。即使在系统故障或重启后,消息仍然可以被恢复和传递,避免了消息的丢失。此外,消息引擎系统还提供了消息的确认机制和重试机制,确保消息的可靠传递。
- 「扩展性」:使用消息引擎系统可以轻松地扩展系统的规模和容量。通过增加消息引擎的实例或增加消息队列的分区,可以实现水平扩展,以处理更大的消息流量和更高的并发请求。
- 「消息传递模式」:消息引擎系统支持多种消息传递模式,如点对点模式、发布/订阅模式、请求/响应模式等。不同的模式适用于不同的业务场景,可以根据需求选择合适的模式。
引入消息引擎系统可以提供更灵活、可靠和高效的消息传递方式,使得系统可以更好地适应复杂的业务需求和分布式环境。它提供了解耦、异步通信、可靠性、可伸缩性和性能等优势,使系统设计更具弹性和可维护性。
常见的消息传输模型有哪些呢
在计算机系统中,常见的消息传输模型有以下几种:
- 「点对点模型」(Point-to-Point Model):在点对点模型中,消息的发送者将消息发送到特定的接收者。每个消息只被一个接收者接收,类似于一对一的通信。这种模型通常使用队列或消息中间件来实现,例如JMS(Java Message Service)中的点对点模型。
- 「发布/订阅模型」(Publish/Subscribe Model):在发布/订阅模型中,消息的发送者(发布者)将消息发布到一个主题(Topic),多个接收者(订阅者)可以订阅该主题,接收发布的消息。这种模型通常用于广播消息给多个接收者,类似于一对多的通信。常见的实现包括消息队列、消息中间件、事件总线等。
- 「请求/响应模型」(Request/Response Model):在请求/响应模型中,客户端发送请求消息给服务端,服务端处理请求并发送响应消息给客户端。这种模型通常用于客户端向服务端请求数据或执行操作,并等待服务端返回响应。常见的实现包括HTTP协议、RPC(Remote Procedure Call)等。
- 「发布/订阅加请求/响应模型」:这种模型结合了发布/订阅模型和请求/响应模型的特性。消息的发送者可以发布消息到一个主题,多个接收者可以订阅该主题并接收消息。同时,某些接收者还可以向发送者发送请求消息,并等待发送者的响应消息。这种模型通常用于实现复杂的分布式系统和消息传递模式。
这些消息传输模型可以根据具体的需求和场景进行选择和组合,以实现灵活、可靠的消息传输和通信。不同的模型适用于不同的应用场景,需根据具体的业务需求来选择合适的模型。
那么,kafka支持哪些消息传输模型?
Kafka是一个分布式流处理平台,它支持以下几种常见的消息传输模型:
- 「发布/订阅模型」(Publish/Subscribe Model):Kafka的核心特性就是基于发布/订阅模型的消息传输。生产者(发布者)将消息发布到一个主题(Topic),多个消费者(订阅者)可以订阅该主题,以并行方式消费消息。Kafka使用消息日志来持久化消息,保证消息的持久性和可靠性。
- 「队列模型」(Queue Model):尽管Kafka主要是基于发布/订阅模型,但也可以通过使用单个消费者组来实现类似队列模型的行为。在这种情况下,每个主题的每个分区只能由一个消费者消费,确保消息按顺序进行处理。
- 「请求/响应模型」(Request/Response Model):尽管Kafka主要是用于流式处理,但也可以使用请求/响应模式。客户端可以向Kafka发送请求消息,并等待Kafka返回响应消息。这种模型通常用于需要以请求/响应方式与Kafka进行交互的应用场景。
- 「批量处理模型」(Batch Processing Model):Kafka支持从生产者端进行消息批量发送,以及从消费者端进行消息批量消费。这种模型可以更有效地利用网络和IO资源,提高消息的吞吐量和性能。
Kafka的灵活性和可扩展性使其适用于许多不同的应用场景,包括实时数据流处理、消息队列、日志收集和分析等。根据具体的需求,可以选择合适的模型来构建基于Kafka的消息传输系统。
不同模型对应的使用场景是什么呢
- 「点对点模型」(Point-to-Point Model):
- 适用场景:单个消息只能被一个接收者处理的场景。例如,任务分发系统、异步请求-响应系统等。
- 「发布/订阅模型」(Publish/Subscribe Model):
- 适用场景:需要将消息广播给多个订阅者的场景。例如,实时数据推送、事件通知、日志订阅等。
- 「请求/响应模型」(Request/Response Model):
- 适用场景:需要进行请求和响应的场景。例如,客户端与服务器之间的请求-响应交互、RPC(远程过程调用)等。
- 「队列模型」(Queue Model):
- 适用场景:需要确保消息按顺序处理的场景,每个消息只能被一个接收者处理。例如,任务队列、工作流系统等。
- 「扇出/扇入模型」(Fan-Out/Fan-In Model):
- 适用场景:需要将消息复制给多个不同的接收者的场景。例如,日志记录和分析系统、消息广播等。
- 「请求/异步响应模型」(Request/Async Response Model):
- 适用场景:需要异步处理请求并返回响应的场景。例如,长时间运行的任务、异步通知等。
- 「分布式事务模型」(Distributed Transaction Model):
- 适用场景:需要保证多个分布式系统之间的事务一致性的场景。例如,分布式订单处理、分布式支付系统等。
Kafka术语说明
- 「消息:Record」。Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。
- 「主题:Topic」。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。
- 「分区:Partition」。一个有序不变的消息序列。每个主题下可以有多个分区。
- 「消息位移:Offset」。表示分区中每条消息的位置信息,是一个单调递增且不变的值。
- 「副本:Replica」。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
- 「生产者:Producer」。向主题发布新消息的应用程序。
- 「消费者:Consumer」。从主题订阅新消息的应用程序。消费者位移:
- 「Consumer Offset」。表征消费者消费进度,每个消费者都有自己的消费者位移。消费者组:
- 「Consumer Group」。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。
- 「重平衡:Rebalance」。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。
我们要注意的几个点