Kafaka基础入门

转载请标明出处:https://blog.csdn.net/donkor_/article/details/140316727

一、参考资料

官网:https://kafka.apache.org/

二、基本认识

2.1 消息中间件(消息队列)

消息队列一种在应用程序之间传递消息的通信模式。它将消息发送方和消息接收方解耦,使得消息发送方可以异步地向消息队列发送消息,而消息接收方则可以按照自己的节奏从消息队列中接收和处理消息。

消息队列可以用于解决不同应用程序之间的异步通信问题,尤其适用于大规模复杂的分布式系统中。它可以帮助处理高并发、高可靠性、可扩展性等问题

2.2 常见的消息中间件

  • RabbitMQ:RabbitMQ 是一个可靠、灵活、可扩展的开源消息队列系统,它支持多种消息协议,并提供了丰富的特性,如消息持久化、消息路由、消息确认机制等。它是一个传统的消息代理模型,典型的应用场景包括任务分发、日志处理、实时消息推送等。

  • Apache Kafka:Kafka 是一个高吞吐量、可持久化、分布式的发布订阅消息系统。它设计用于处理大数据流,具有高可伸缩性和高可靠性,适用于实时数据流处理、日志收集、事件驱动等场景。Kafka 的一个特点是以分布式日志存储的方式来处理消息,保证了消息的持久化和高性能。

  • ActiveMQ:ActiveMQ 是一个基于 Java 的开源消息中间件,它实现了 JMS(Java Message Service)的规范,提供了可靠的消息传递、消息持久化、消息订阅和发布等功能。ActiveMQ 支持多种传输协议,如 TCP、STOMP、AMQP 等,可以与各种编程语言和应用集成。

  • RocketMQ:RocketMQ 是阿里巴巴开源的分布式消息中间件,它具有高吞吐量、低延迟、高可靠性等特点。RocketMQ 支持分布式部署,能够处理大规模的消息流量,广泛用于电商、物流、金融等领域的实时消息处理和数据流转。

  • NATS:NATS 是一个轻量级的、高性能的开源消息中间件,它主要关注简洁、性能和易用性。NATS 提供了基于主题的消息传递模型,支持发布-订阅、请求-响应等消息模式,适用于微服务架构、大规模部署和云原生应用。

2.3 消息中间件的通信协议

  • AMQP(Advanced Message Queuing Protocol):AMQP 是一个开放的、标准化的消息传递协议,支持可靠的、异步的、分布式的消息通信。它定义了一套统一的消息格式和通信模型,使得不同的消息中间件可以进行互操作。

  • MQTT(Message Queuing Telemetry Transport):MQTT 是一种轻量级的、基于发布-订阅模型的消息传输协议,主要用于物联网设备之间的实时通信。MQTT 协议特别适合在网络带宽有限、网络连接不稳定的环境中使用。

  • STOMP(Simple Text Oriented Messaging Protocol):STOMP 是一个简单的文本导向的消息传输协议,它定义了一套基本的命令和消息格式,用于在消息中间件和客户端之间进行通信。

  • JMS(Java Message Service):JMS 是 Java 平台上定义的一套消息中间件的 API 规范,它为 Java 应用程序提供了统一的消息模型和接口。JMS 可以使用不同的底层通信协议,如 AMQP、MQTT、STOMP 等。

  • HTTP/REST:一些消息中间件也支持使用 HTTP 协议进行消息的传输和交互,通过 REST 接口提供消息的发布和订阅功能。这种方式适用于基于 HTTP 的应用和服务之间的消息通信

三、Kafka基本介绍

3.1 概述

Kafka是最初由Linkedin公司开发,是一个分布式支持分区的(partition)、多副本的(replica),基于zookeeper协调分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目

3.2 Kafaka的特性

  • 高吞吐量:Kafka 的设计目标是高吞吐量的消息传递,可以处理大规模的数据流。它能够快速地将大量的消息写入磁盘,并以每秒百万级的速度进行消息的读取和处理。

  • 可靠性:Kafka 在消息传递过程中具有高度的可靠性。它使用多副本机制将消息持久化到磁盘,并可以自动地进行副本的同步和故障恢复。即使出现节点故障,也不会丢失消息。

  • 可扩展性:Kafka 的分布式架构可以支持大规模的集群部署,并能够自动进行负载均衡和故障转移。通过增加节点和分区数量,可以很容易地扩展 Kafka 的容量和性能。

  • 灵活的数据处理:Kafka 可以以事件流的方式进行数据传递,使得数据的处理变得灵活且实时。它支持多个消费者并行地消费同一条消息流,消费者可以根据自己的需求选择订阅的数据分区,并进行多次消费。

  • 生态系统支持:Kafka 是一个生态系统丰富的消息系统,有大量的开源工具和组件与其集成。例如,可以使用 Apache Spark、Apache Flink 等流处理引擎与 Kafka 进行集成,实现实时的数据流处理

3.3 Kafaka的应用场景

  • 日志收集和数据管道:Kafka 可以作为日志收集的中间件,将多个日志源的数据集中存储和分发。它可以实时地接收大量的日志数据,并将其传递给后续的处理组件,如实时分析、存储、监控等。

  • 实时数据流处理:Kafka 可以作为实时数据流处理的消息传递层。它接收实时产生的数据,并将其传递给流处理框架,如Spark Streaming、Flink等,来进行实时的数据转换、计算、分析等。

  • 事件驱动架构:Kafka 的发布订阅模型和容错性使其成为构建事件驱动架构的理想选择。多个应用程序可以将事件发布到 Kafka,其他的应用程序则可以订阅这些事件并进行相应的处理。

  • 流量解耦和削峰填谷:Kafka 可以解决生产者和消费者之间的流量差异问题。生产者和消费者之间通过 Kafka 进行解耦,生产者可以以高吞吐量将数据写入 Kafka,而消费者可以按照自己的处理能力从 Kafka 中获取数据进行消费。

  • 分布式消息系统:Kafka 的分布式架构和高可用性使其成为构建分布式消息系统的良好选择。多个 Kafka 集群可以组成一个分布式的消息系统,实现数据的传输和复制,以支持多数据中心的数据传输和同步

四、消息队列通信的模式

4.1 点对点模式

点对点模式中,每个消息都有一个确定的发送者和接收者。发送者将消息发送到队列中,并且只有一个接收者可以从队列中获取该消息并进行处理。消息的发送者和接收者之间是一对一的关系。一旦消息被接收者处理,它将从队列中移除,不再被其他接收者处理。

4.2 发布订阅模式

发布-订阅模式中,消息通过主题(Topic)进行发布和订阅。发布者将消息发布到一个或多个主题,而订阅者可以选择性地订阅一个或多个主题来接收消息。多个订阅者可以同时订阅同一个主题,每个订阅者都将收到发布到该主题的消息。订阅者和发布者之间是一对多的关系。

五、Kafaka基础架构与术语

5.1 基础架构图

5.2 常见术语

  • Broker(代理):Kafka集群中的一个服务器节点,负责处理消息的存储和传递,每个代理可以管理多个主题和分区。

  • Topic(主题):消息的逻辑分类,Producers(生产者)发送消息到特定的主题,Consumers(消费者)订阅特定的主题以接收消息。

  • Partition(分区):每个主题可以被分为多个分区,每个分区在Kafka集群中是一个独立的存储单元。分区是消息在Kafka中的基本单位,每个分区都有一个唯一的标识符。

  • Producer(生产者):产生消息并发送到Kafka集群的应用程序。

  • Consumer(消费者):从Kafka集群中订阅主题并消费消息的应用程序。

  • Consumer Group(消费者组):一组具有相同组ID的消费者。Kafka将消息分发给消费者组的不同消费者,以实现负载均衡和高可用性。

  • Offset(偏移量):Kafka为分区中的每条消息分配的唯一标识符。消费者可以跟踪它们在分区中消费的消息位置。

  • Leader(首领)和 Follower(追随者):每个分区在Kafka集群中有一个Leader和零个或多个Follower。Leader负责处理分区的读写请求,而Follower用于备份和冗余。

  • Replica(副本):分区的副本集,包括Leader和Follower。副本用于实现数据的冗余和故障恢复。

  • Commit(提交):消费者将已消费的消息的偏移量提交给Kafka集群,表示已经成功消费了这些消息。

  • Commit Offset(提交偏移量):消费者将已消费的消息的偏移量提交给Kafka集群,以便在重启消费者时能够从正确的位置继续消费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值