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

文章目录

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 语言编写的
相关推荐
AAA小肥杨3 小时前
基于k8s的Python的分布式深度学习训练平台搭建简单实践
人工智能·分布式·python·ai·kubernetes·gpu
爬山算法6 小时前
Redis(73)如何处理Redis分布式锁的死锁问题?
数据库·redis·分布式
yumgpkpm7 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 、mysql数据库汇聚到Cloudera CDP7.3操作指南
大数据·数据库·mysql·华为·oracle·kafka·cloudera
祈祷苍天赐我java之术8 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap
猫林老师10 小时前
HarmonyOS线程模型与性能优化实战
数据库·分布式·harmonyos
阿里云云原生11 小时前
AI 时代的数据通道:云消息队列 Kafka 的演进与实践
云原生·kafka
在未来等你14 小时前
Elasticsearch面试精讲 Day 26:集群部署与配置最佳实践
大数据·分布式·elasticsearch·搜索引擎·面试
勤源科技14 小时前
分布式链路追踪中的上下文传播与一致性维护技术
分布式
互联网工匠14 小时前
分布式操作的一致性方案
分布式·架构
熊猫钓鱼>_>14 小时前
【案例实战】鸿蒙分布式智能办公应用的架构设计与性能优化
分布式·华为·harmonyos