【Kafka系列】(一)Kafka入门(上)

简介: 【Kafka系列】(一)Kafka入门

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

首发博客地址

系列文章地址


Kafka是什么?

一句话概括:「Apache Kafka 是一款开源的消息引擎系统」

什么是消息引擎系统?

消息引擎系统(Message Broker System)是一种中间件软件或服务,用于在分布式系统中进行异步消息传递。它提供了可靠的消息传输、消息路由和消息处理的功能,使不同的应用程序和组件能够通过发送和接收消息进行通信。

消息引擎系统通常由以下几个核心组件组成:

  1. 发布者(Publisher):负责将消息发布到消息引擎系统中。发布者将消息发送到指定的主题(Topic)或队列(Queue)中。
  2. 订阅者(Subscriber):订阅者可以通过订阅特定的主题或队列来接收消息。订阅者可以按照自己的需求选择订阅的消息类型和主题。
  3. 主题/队列(Topic/Queue):主题或队列是消息的目的地,消息发布者将消息发送到特定的主题或队列,而订阅者可以从中接收相应的消息。
  4. 消息路由(Message Routing):消息引擎系统负责将消息路由到正确的订阅者。它根据订阅者的订阅关系和消息的标识(如主题、标签等)来确定消息的路由方式。
  5. 消息持久化(Message Persistence):消息引擎系统通常会将消息持久化到存储介质中,以确保消息的可靠性和持久性。这样即使在系统故障或重启后,消息仍然可以被正确地传递和处理。
  6. 消息传递模式(Message Delivery Patterns):消息引擎系统支持多种消息传递模式,如点对点模式(Point-to-Point)、发布/订阅模式(Publish/Subscribe)、请求/响应模式(Request/Response)等,以满足不同的通信需求。

消息引擎系统具有解耦性、可靠性和扩展性等优点,使得分布式系统中的不同组件能够进行异步通信,提高系统的可靠性、可伸缩性和性能。常见的消息引擎系统包括Apache Kafka、RabbitMQ、ActiveMQ等。

为什么要引入消息引擎呢?直接A发送给B不好吗?

引入消息引擎系统的主要目的是解耦和提高系统的可伸缩性、可靠性和性能。下面是一些使用消息引擎系统的优点:

  1. 「解耦性」:通过引入消息引擎系统,发送者和接收者之间可以解耦。发送者只需要将消息发送到消息引擎中的特定主题或队列,而不需要直接知道接收者的详细信息。接收者可以根据自己的需求选择订阅相应的主题或队列来接收消息。这种解耦可以使系统的组件可以独立演化和扩展,避免了紧耦合的依赖关系。
  2. 「异步通信」:消息引擎系统支持异步通信模式,发送者可以将消息发送到消息引擎中后立即返回,而不需要等待接收者的响应。这种异步通信模式可以提高系统的响应速度和并发处理能力,使得发送者和接收者可以独立地进行任务处理,提高系统的整体性能和吞吐量。
  3. 「可靠性」:消息引擎系统通常会将消息持久化到存储介质中,以确保消息的可靠性和持久性。即使在系统故障或重启后,消息仍然可以被恢复和传递,避免了消息的丢失。此外,消息引擎系统还提供了消息的确认机制和重试机制,确保消息的可靠传递。
  4. 「扩展性」:使用消息引擎系统可以轻松地扩展系统的规模和容量。通过增加消息引擎的实例或增加消息队列的分区,可以实现水平扩展,以处理更大的消息流量和更高的并发请求。
  5. 「消息传递模式」:消息引擎系统支持多种消息传递模式,如点对点模式、发布/订阅模式、请求/响应模式等。不同的模式适用于不同的业务场景,可以根据需求选择合适的模式。

引入消息引擎系统可以提供更灵活、可靠和高效的消息传递方式,使得系统可以更好地适应复杂的业务需求和分布式环境。它提供了解耦、异步通信、可靠性、可伸缩性和性能等优势,使系统设计更具弹性和可维护性。

常见的消息传输模型有哪些呢

在计算机系统中,常见的消息传输模型有以下几种:

  1. 「点对点模型」(Point-to-Point Model):在点对点模型中,消息的发送者将消息发送到特定的接收者。每个消息只被一个接收者接收,类似于一对一的通信。这种模型通常使用队列或消息中间件来实现,例如JMS(Java Message Service)中的点对点模型。
  2. 「发布/订阅模型」(Publish/Subscribe Model):在发布/订阅模型中,消息的发送者(发布者)将消息发布到一个主题(Topic),多个接收者(订阅者)可以订阅该主题,接收发布的消息。这种模型通常用于广播消息给多个接收者,类似于一对多的通信。常见的实现包括消息队列、消息中间件、事件总线等。
  3. 「请求/响应模型」(Request/Response Model):在请求/响应模型中,客户端发送请求消息给服务端,服务端处理请求并发送响应消息给客户端。这种模型通常用于客户端向服务端请求数据或执行操作,并等待服务端返回响应。常见的实现包括HTTP协议、RPC(Remote Procedure Call)等。
  4. 「发布/订阅加请求/响应模型」:这种模型结合了发布/订阅模型和请求/响应模型的特性。消息的发送者可以发布消息到一个主题,多个接收者可以订阅该主题并接收消息。同时,某些接收者还可以向发送者发送请求消息,并等待发送者的响应消息。这种模型通常用于实现复杂的分布式系统和消息传递模式。

这些消息传输模型可以根据具体的需求和场景进行选择和组合,以实现灵活、可靠的消息传输和通信。不同的模型适用于不同的应用场景,需根据具体的业务需求来选择合适的模型。

那么,kafka支持哪些消息传输模型?

Kafka是一个分布式流处理平台,它支持以下几种常见的消息传输模型:

  1. 「发布/订阅模型」(Publish/Subscribe Model):Kafka的核心特性就是基于发布/订阅模型的消息传输。生产者(发布者)将消息发布到一个主题(Topic),多个消费者(订阅者)可以订阅该主题,以并行方式消费消息。Kafka使用消息日志来持久化消息,保证消息的持久性和可靠性。
  2. 「队列模型」(Queue Model):尽管Kafka主要是基于发布/订阅模型,但也可以通过使用单个消费者组来实现类似队列模型的行为。在这种情况下,每个主题的每个分区只能由一个消费者消费,确保消息按顺序进行处理。
  3. 「请求/响应模型」(Request/Response Model):尽管Kafka主要是用于流式处理,但也可以使用请求/响应模式。客户端可以向Kafka发送请求消息,并等待Kafka返回响应消息。这种模型通常用于需要以请求/响应方式与Kafka进行交互的应用场景。
  4. 「批量处理模型」(Batch Processing Model):Kafka支持从生产者端进行消息批量发送,以及从消费者端进行消息批量消费。这种模型可以更有效地利用网络和IO资源,提高消息的吞吐量和性能。

Kafka的灵活性和可扩展性使其适用于许多不同的应用场景,包括实时数据流处理、消息队列、日志收集和分析等。根据具体的需求,可以选择合适的模型来构建基于Kafka的消息传输系统。

不同模型对应的使用场景是什么呢

  1. 「点对点模型」(Point-to-Point Model):
  • 适用场景:单个消息只能被一个接收者处理的场景。例如,任务分发系统、异步请求-响应系统等。
  1. 「发布/订阅模型」(Publish/Subscribe Model):
  • 适用场景:需要将消息广播给多个订阅者的场景。例如,实时数据推送、事件通知、日志订阅等。
  1. 「请求/响应模型」(Request/Response Model):
  • 适用场景:需要进行请求和响应的场景。例如,客户端与服务器之间的请求-响应交互、RPC(远程过程调用)等。
  1. 「队列模型」(Queue Model):
  • 适用场景:需要确保消息按顺序处理的场景,每个消息只能被一个接收者处理。例如,任务队列、工作流系统等。
  1. 「扇出/扇入模型」(Fan-Out/Fan-In Model):
  • 适用场景:需要将消息复制给多个不同的接收者的场景。例如,日志记录和分析系统、消息广播等。
  1. 「请求/异步响应模型」(Request/Async Response Model):
  • 适用场景:需要异步处理请求并返回响应的场景。例如,长时间运行的任务、异步通知等。
  1. 「分布式事务模型」(Distributed Transaction Model):
  • 适用场景:需要保证多个分布式系统之间的事务一致性的场景。例如,分布式订单处理、分布式支付系统等。

Kafka术语说明

  • 「消息:Record」。Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。
  • 「主题:Topic」。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。
  • 「分区:Partition」。一个有序不变的消息序列。每个主题下可以有多个分区。
  • 「消息位移:Offset」。表示分区中每条消息的位置信息,是一个单调递增且不变的值。
  • 「副本:Replica」。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
  • 「生产者:Producer」。向主题发布新消息的应用程序。
  • 「消费者:Consumer」。从主题订阅新消息的应用程序。消费者位移:
  • 「Consumer Offset」。表征消费者消费进度,每个消费者都有自己的消费者位移。消费者组:
  • 「Consumer Group」。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。
  • 「重平衡:Rebalance」。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。

我们要注意的几个点


相关文章
|
7月前
|
消息中间件 Java Kafka
kafka入门demo
kafka入门demo
80 0
|
消息中间件 监控 关系型数据库
【Kafka系列】(一)Kafka入门(下)
【Kafka系列】(一)Kafka入门(下)
|
7月前
|
消息中间件 分布式计算 Kafka
SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)
SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(一)
110 5
|
7月前
|
消息中间件 Java Kafka
Kafka【环境搭建 01】kafka_2.12-2.6.0 单机版安装+参数配置及说明+添加到service服务+开机启动配置+验证+chkconfig配置说明(一篇入门kafka)
【2月更文挑战第19天】Kafka【环境搭建 01】kafka_2.12-2.6.0 单机版安装+参数配置及说明+添加到service服务+开机启动配置+验证+chkconfig配置说明(一篇入门kafka)
298 1
|
7月前
|
消息中间件 存储 Kafka
Kafka【基础入门】
Kafka【基础入门】
73 1
|
7月前
|
消息中间件 存储 分布式计算
Apache Kafka-初体验Kafka(01)-入门整体认识kafka
Apache Kafka-初体验Kafka(01)-入门整体认识kafka
84 0
|
7月前
|
消息中间件 算法 Kafka
Kafka入门,这一篇就够了(安装,topic,生产者,消费者)
Kafka入门,这一篇就够了(安装,topic,生产者,消费者)
336 0
|
消息中间件 存储 分布式计算
Spark学习---6、SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(二)
Spark学习---6、SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(二)
|
消息中间件 存储 Kafka
(四)kafka从入门到精通之安装教程
Kafka是一个高性能、低延迟、分布式的分布式数据库,可以在分布式环境中实现数据的实时同步和分发。Zookeeper是一种开源的分布式数据存储系统,它可以在分布式环境中存储和管理数据库中的数据。它的主要作用是实现数据的实时同步和分发,可以用于实现分布式数据库、分布式文件系统、分布式日志系统等。Zookeeper的设计目标是高可用性、高性能、低延迟,它支持多种客户端协议,包括TCP和HTTP,可以方便地与其他分布式系统进行集成。
134 0
|
消息中间件 传感器 Kafka
(三)kafka从入门到精通之使用场景
Kafka 是一种流处理平台,主要用于处理大量数据流,如实时事件、日志文件和传感器数据等。Kafka的目的是实现高吞吐量、低延迟和高可用性的数据处理。Kafka提供了一个高度可扩展的架构,可以轻松地添加和删除节点,并且能够处理数百亿条消息/分区。Kafka的消息可以容错,即使某个节点失败,消息也会在集群中的其他节点上得到处理。总的来说,Kafka 是一个非常强大的数据处理平台,可以用于实时数据处理、日志文件处理、传感器数据处理和流处理等场景。
160 0
下一篇
DataWorks