当前位置: 首页 > news >正文

夯实 kafka 系列|第一章:初识 kafka

文章目录

    • 1.前言
    • 2.kafka 是什么
    • 3.kafka和其他MQ的区别,如何选择
      • 3.1 区别
      • 3.2 如何选择
    • 4.术语
    • 5.版本号介绍

1.前言

本文主要是介绍 kafka 的一些基本概念,以及实际项目中,我们应该如何选型;

后面会持续整理相关的文章,实际项目中的用法

  • 基本用法

  • 亿级消息处理

  • 分布式消息框架

2.kafka 是什么

Kafka 属于分布式的消息引擎系统(又称消息队列,或者消息中间件),主要用于处理实时数据流、构建高吞吐量的消息系统。它的核心功能是作为 消息中间件(Message Broker),帮助不同服务之间高效、可靠地传递数据。

核心特性

  • 高吞吐量:单机支持每秒百万级消息处理。
  • 持久化存储:消息可保留指定时间(如 7 天),支持重复消费。
  • 分布式容错:数据自动复制到多个节点,单点故障不影响可用性。
  • 实时流处理:支持窗口、聚合等复杂流处理操作。

3.kafka和其他MQ的区别,如何选择

3.1 区别

  • RabbitMQ 或 ActiveMQ 这样的传统消息中间件,它们处理和响应消息的方式是破坏性的(destructive),即一旦消息被成功处理,就会被从 Broker 上删除。

  • 但是 Kafka,由于它是基于日志结构(log-based)的消息引擎,消费者在消费消息时,仅仅是从磁盘文件上读取数据而已,是只读的操作,因此消费者不会删除消息数据。

    • 同时,由于位移数据是由消费者控制的,因此它能够很容易地修改位移的值,实现重复消费历史数据的功能。

3.2 如何选择

  • 传统消息中间件 Rabbitmq
    • 如果在你的场景中,消息处理逻辑非常复杂,处理代价很高,同时我们又不太关心消息之间的顺序
    • 业务场景比较贴合,Rabbtimq 的下面几种工作模式,可以选择
      • Hello World:简单队列。
      • Work Queues:任务分发。
      • Publish/Subscribe:消息广播。
      • Routing:消息过滤。
      • Topics:复杂的消息过滤。
      • RPC:远程过程调用。
      • Publisher Confirms:高可靠性消息发送。
  • kafka 场景
    • 如果你的场景需要较高的吞吐量,而且每条消息的处理时间很短
    • 消息可以追溯,可以简单理解为数据库查询历史消息–这点非常重要
    • 此时,Kafka 就是你的首选。

4.术语

请添加图片描述

  • 消息:Record。Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。

  • 主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。

  • 分区:Partition。一个有序不变的消息序列。每个主题下可以有多个分区。

    • 分区的作用就是提供负载均衡的能力,实现系统的高伸缩性。
    • 不同的分区能够被放置到不同节点的机器上,而数据的读写操作也都是针对分区这个粒度而进行的,这样每个节点的机器都能独立地执行各自分区的读写请求处理。并且,我们还可以通过添加新的节点机器来增加整体系统的吞吐量。
  • 消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增且不变的值。

  • 副本:Replica。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。

  • 生产者:Producer。向主题发布新消息的应用程序。

  • 消费者:Consumer。从主题订阅新消息的应用程序。

  • 消费者位移:Consumer Offset。表征消费者消费进度,每个消费者都有自己的消费者位移。

  • 消费者组:Consumer Group。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。

  • 重平衡:Rebalance。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。

5.版本号介绍

以公司 kafka docker 镜像号说明

镜像版本号:127.0.0.1:5000/kafka:2.11-2.0.0.181225

  • kafka的版本是 2.0.0
  • 2.11 指的是 scala 语言的版本
    • 因为 kafka 是 scala 语言编写的

相关文章:

  • 模型(分类模型、回归模型、聚类模型)的评分指标
  • dns实现主服务器
  • leetcode hot100(五)
  • 【实用部署教程】olmOCR智能PDF文本提取系统:从安装到可视化界面实现
  • 企业年度经营计划制定与管理方法论(124页PPT)(文末有下载方式)
  • CSS Grid 布局
  • JVM OOM问题如何排查和解决
  • 面试提问:如何判断 Hive 表是内部表还是外部表?
  • MySQL 入门大全:运算符
  • 基于Selenium Grid的分布式测试架构设计与深度实践
  • springboot444-基于Vue的网络小说交流平台(源码+数据库+纯前后端分离+部署讲解等)
  • 【初学者】请介绍一下线性与非线性的区别?
  • Unity—从入门到精通(第一天)
  • 详细解析格式化消息框的代码
  • defineAsyncComponent和一般的import有什么区别
  • 微前端 qiankun vite vue3
  • cmake 之 CMakeLists.txt 中的函数是从哪里来的
  • C#基于MVC模式实现TCP三次握手,附带简易日志管理模块
  • Spring配置文件-Bean实例化三种方式
  • 神经网络中层与层之间的关联
  • 董军在第六届联合国维和部长级会议上作大会发言
  • 辽宁盘山县一乡镇幼儿园四名老师被指多次殴打一女童,均被行拘
  • 现场丨在胡适施蛰存等手札与文献间,再读百年光华
  • 在古老的意大利科莫歌剧院,廖昌永唱响16首中国艺术歌曲
  • 北京13日冰雹过后,已受理各险种报案近3万件
  • 国羽用冠军开启奥运周期,林丹:希望洛杉矶奥运取得更好成绩