消息中间件---Kafka

news/2024/9/22 17:19:56 标签: kafka, 分布式

一、什么是Kafka?

Kafka是一个分布式流处理平台,类似于消息队列或企业消息传递系统;

  • 流处理事什么呢?

流处理就是数据处理工作流,本质上是一种计算机编程范例。流处理是对接收到的新数据事件的连续处理。‌它涉及对从生产者到消费者的一系列事件进行处理。‌

  • 流处理平台有哪些特性?

  1. 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。
  2. 可以储存流式的记录,并且有较好的容错性。
  3. 可以在流式记录产生时就进行处理。

二、kafka的特性

  • Kafka作为一个集群,运行在一台或者多台服务器上.
  • Kafka 通过 topic 对存储的流数据进行分类。
  • 每条记录中包含一个key,一个value和一个timestamp(时间戳)。

Kafka的组成

  1. 主题(topic):Kafka将消息分门别类,每一类的消息称之为一个主题(Topic),每个producer将消息发送到Kafka中都需要指明要存到哪个topic中就是表示这个消息属于哪一类;
  2. 分区(partition):每个 topic 都可以分成多个 partition,每个 partition 在存储层面是 append log 文件。任何发布到此 partition 的消息都会被直接追加到 log 文件的尾部。
  3. producer:发布消息的对象称之为主题生产者(Kafka topic producer)
  4. consumer:订阅消息并处理发布的消息的对象称之为主题消费者(consumers)

  5. broker:已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker)。 消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。

三、Kafka的架构设计

发布 - 订阅消息的工作流程

  • 生产者定期向主题发送消息。
  • Kafka 代理存储broker为该特定主题配置的分区中的所有消息。 它确保消息在分区之间平等共享。 如果生产者发送两个消息并且有两个分区,Kafka 将在第一分区中存储一个消息,在第二分区中存储第二消息。
  • 消费者订阅特定主题
  • 一旦消费者订阅主题,Kafka 将向消费者提供主题的当前偏移,并且还将偏移保存在 Zookeeper 系统中。
  • 消费者将定期请求 Kafka (如间隔100 Ms)新消息。
  • 一旦 Kafka 收到来自生产者的消息,它将这些消息转发给消费者。
  • 消费者将收到消息并进行处理。
  • 一旦消息被处理,消费者将向 Kafka 代理发送确认。
  • 一旦 Kafka 收到确认,它将偏移更改为新值,并在 Zookeeper 中更新它。 由于偏移在 Zookeeper 中维护,消费者可以正确地读取下一封邮件,即使在服务器暴力期间。
  • 以上流程将重复,直到消费者停止请求。
  • 消费者可以随时回退/跳到所需的主题偏移量,并阅读所有后续消息。

发布订阅模式

生产者将消息放入消息队列后,队列会将消息推送给订阅过该类消息的消费者。由于是消费者被动接收推送,所以无需感知消息队列是否有待消费的消息。

  • 生产者发送消息,多个消费者只能有一个消费者接收到消息
  • 生产者发送消息,多个消费者都可以接收到消息

kafka的应用场景

  • 日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
  • 消息系统:解耦和生产者和消费者、缓存消息等。
  • 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

kafka的设计思想

  • 消息持久化:Kafka中会把消息持久化到本地文件系统中,并且保持极高的效率。
  • ush-and-pull :Kafka中的Producer和consumer采用的是push-and-pull模式,即Producer只管向broker push消息,consumer只管从broker pull消息,两者对消息的生产和消费是异步的。
  • 负载均衡方面: Kafka提供了一个 metadata API来管理broker之间的负载
  • 分区机制partition:Kafka的broker端支持消息分区,Producer可以决定把消息发到哪个分区,在一个分区中消息的顺序就是Producer发送消息的顺序,一个主题中可以有多个分区,具体分区的数量是可配置的。
  • 消息有效期:Kafka会长久保留其中的消息,以便consumer可以多次消费,当然其中很多细节是可配置的。
  • 批量发送:Kafka支持以消息集合为单位进行批量发送,以提高push效率。
  • 消息状态:在Kafka中,消息的状态被保存在consumer中,broker不会关心哪个消息被消费了被谁消费了,只记录一个offset值(指向partition中下一个要被消费的消息位置),这就意味着如果consumer处理不好的话,broker上的一个消息可能会被消费多次。
  • Kafka集群中broker之间的关系:不是主从关系,各个broker在集群中地位一样,我们可以随意的增加或删除任何一个broker节点。
  • 同步异步:Producer采用异步push方式,极大提高Kafka系统的吞吐率

http://www.niftyadmin.cn/n/5670649.html

相关文章

如何将很多个pdf拼接在一起?很多种PDF拼接的方法

如何将很多个pdf拼接在一起?将多个PDF文件合并不仅能够提升信息的整合性,还能使文件管理更加高效。想象一下,你需要向同事或老师提交一份综合报告,其中包含了多份相关资料。如果每个文件单独存在,查找和传输都会变得繁…

通信工程学习:什么是NFV网络功能虚拟化

NFV:网络功能虚拟化 NFV(Network Function Virtualization),即网络功能虚拟化,是一种通过虚拟化技术实现网络功能的技术手段。它借鉴了x86服务器的架构,将传统的网络硬件设备如路由器、交换机、防火墙、负载…

将sqlite3移植到开发板上

1、下载c源码 sqlite官网下载C源码:SQLite Download Page 点击第二个链接下载 2、解压 1、将下载好的c源码,放在linux下, 2、解压压缩包:tar -zxvf sqlite-autoconf-3460100 新建一个用存放 编译出来的文件: mkd…

Impala如何使用

Impala 是一个开源的 SQL 查询引擎,旨在快速分析大型数据集,通常与 Apache Hadoop 和 Apache HBase 一起使用。以下是使用 Impala 的基本步骤: 安装 Impala: 确保你已经安装了 Hadoop 和 HDFS。你可以使用 Cloudera 提供的工具来安…

高级语言程序与机器语言程序之间的转换

1、高级语言程序与机器语言程序之间的转换主要涉及以下几个关键步骤: 编译方式: 定义:将整个高级语言编写的源程序先翻译成机器语言程序,然后再生成可在操作系统下直接运行的执行程序(目标程序)。 过程&a…

华为HarmonyOS地图服务 3 - 如何开启和展示“我的位置”?

一. 场景介绍 本章节将向您介绍如何开启和展示“我的位置”功能,“我的位置”指的是进入地图后点击“我的位置”显示当前位置点的功能。效果如下: 二. 接口说明 “我的位置”功能主要由MapComponentController的方法实现,更多接口及使用方法…

深入解析 Apache Doris架构、应用场景与最佳实践

一、Doris 简介 Apache Doris 是一款现代化的 MPP(Massively Parallel Processing)数据库,专注于解决大规模数据分析和实时查询的需求。它最初源自百度的 Palo 项目,随后贡献给了 Apache 基金会,并在开源社区的共同努…

有哪些大模型API可以免费调用

大模型的竞争越来越激烈,各家大模型厂商也纷纷调低了大模型API的价格。这对于想尝试利用大模型的AI能力来构建AI应用的开发者来说无疑是非常利好的消息。 甚至各家厂商还放出了一些轻量的大模型可以免费调用。 经过测试对比,我给大家推荐两个免费可用的…