kafka 系列 -- 1、基本概念

算法冰川
• 阅读 1251

前言

思考的过程往往比直接得到结论更加重要

kafka 应用场景

  1. 应用监控
  2. 网站用户行为追踪
  3. 流数据
  4. 持久性日志

基本概念

在说基本概念前,先看一下 kafka 的系统架构
kafka 系列 -- 1、基本概念

  1. Broker
    一般而言,一台机器就是一个 broker,当然 1 台机器上可以部署多个 broker
  2. Producer
    消息的生产者
  3. Consumer
    消息的消费者
  4. Consumer Group
    消费者组,组内可以有多个消费者,共享同一个 groupid。消费组内的消费者,一般情况下为同一个消费者部署多个实例。
  5. Topic
    topic 在 kafka 中是一个逻辑上的概念,用于将 partition 分类。1 个 topic 有多个 partition。生产者将消息发送到指定的 topic 中,消费者从指定的 topic 进行消费。
  6. partition
    一个可追加的日志存储文件。kafka 的分区可以分布在不同的 broker 上
  7. 多副本机制
    kafka 为 partition 引入了多副本机制,可以通过增加副本数量来提升容灾能力。同一分区中的不同副本保存相同的消息。副本之间一般是 一主多从。如下图,每个分区有 3 个副本kafka 系列 -- 1、基本概念

    1. AR
      集群中的副本,统称 AR(Assigned Replication),AR = ISR + OSR
    2. ISR
      与 leader 副本保持一定同步的副本,称为 ISR(in-sync-replication)。消息需先发送到 leader 副本,follower 才能从 leader 副本中拉取消息
    3. OSR
      与 leader 副本同步滞后过多的副本,称为 OSR(out-sync-replication)。
    4. leader 副本
      leader 副本负责维护 follower 副本的状态,当 ISR 副本中滞后 leader 副本过多,会被移除到 OSR 副本中。当 OSR 副本跟上了 leader 副本,会被移动到 ISR 副本。只有在 ISR 集合的副本,才有机会选举 leader
    5. HW、LEO
      HW(Hight Watermark)俗称高水位,标识一个特定的偏移量,消费者只能拉取该偏移量之前的消息
      LEO(Low End Offset)日志最后偏移量。标识日志文件中待写入消息的偏移量
    6. 关系图
      图 2: HW、LEO 的关系
      kafka 系列 -- 1、基本概念
      图 3 - 图4: leader 副本、follower、HW、LEO 关系
      kafka 系列 -- 1、基本概念
      消息写入之后,LEO 变成5,follower,会从 leader 中拉取消息,进行同步
      kafka 系列 -- 1、基本概念
      当 ISR 集合的副本都写入 3 后,HW 就会变成 4,表示 0-3 的消息为可消费
      kafka 系列 -- 1、基本概念
      当 ISR 集合都写入 3 、4 之后,HW、LEO 值都变成 5
      kafka 系列 -- 1、基本概念
    7. 总结
      kafka 消息的写入,是可靠性和可用性的权衡。当 ISR 副本均写入消息时,不用等待 OSR 副本也写入消息。这里避免了 OSR 滞后太多,从而导致不可用性,且消息被写入到多个副本,也保证了消息的可靠性。
      当 leader 写入完消息立即挂掉后,ISR 副本因未能同步到消息,从而导致消息丢失。

与 RocketMQ 区别

  1. partition 在 RocketMQ 中为 队列。消费模型也几乎一致,基于消费组进行消费
  2. RocketMQ 有自带的注册中心,无需 zookeeper。
  3. kafka partition 有多副本机制,RocketMQ 队列没有多副本机制
  4. kafka 多副本机制有丢消息问题,RocketMQ 则没有
  5. 从设计上来看,RocketMQ 与 kafka 的解决的应用场景不一样。RocketMQ 注重消息的可靠性,而 kafka 在这一方面比较弱,kafka 更注重系统吞吐量。因此 kafka 不适合要求消息不能丢的场景。
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
作为一名程序员我不忘初心,复习指南
01kafka入门1.1什么是kafka 1.2kafka中的基本概念  1.2.1消息和批次  1.2.2主题和分区  1.2.3生产者和消费者、偏移量、消费者群组  1.2.4Broker和集群  1.2.5保留消息02为什么选择kafka2.1优点 2.2常见场景  2.2.1活动跟踪  2.2.2传递
kelly kelly
4年前
消息队列之Kafka详解
消息队列之Kafka详解1\.什么是Kafka(about:blank1_Kafka_4)2\.Kafka架构(about:blank2_Kafka_15)(about:blank_37)3\.基本概念(about:blank3__40)4\.分区存储(about:blank4
Stella981 Stella981
3年前
Kafka概述及安装部署
一、Kafka概述1.Kafka是一个分布式流媒体平台,它有三个关键功能:(1)发布和订阅记录流,类似于消息队列或企业消息传递系统;(2)以容错的持久方式存储记录流;(3)记录发送时处理流。2.Kafka通常应用的两大类应用(1)构建在系统或应用程序之间的可靠获取数据的实时流数据管道;(2)构建转换或响应数据流的实施
Stella981 Stella981
3年前
Kafka、Redis和其它消息组件比较
Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲、异步通信、汇集日志、系统解耦等方面。相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时,还提供了超一流的读写性能。针对Kafka性能方面进行简单分析,相关数据请参考:https://segmentfault.com/a/1190000003985468(h
Stella981 Stella981
3年前
Spark Streaming和Kafka集成深入浅出
写在前面本文主要介绍SparkStreaming基本概念、kafka集成、Offset管理本文主要介绍SparkStreaming基本概念、kafka集成、Offset管理一、概述Spark Streaming顾名思义是spark的流式处理框架,是面向海量数据实现高吞吐量、高可用的分布式实时计算。关于spark的安装可以参考Spa
Stella981 Stella981
3年前
FusionInsight大数据开发
Kafka应用开发1.了解Kafka应用开发适用场景2.熟悉Kafka应用开发流程3.熟悉并使用Kafka常用API4.进行Kafka应用开发Kafka的定义Kafka是一个高吞吐、分布式、基于发布订阅的消息系统Kafka有如下几个特点:1.高吞吐量2.消息持久化到磁
Stella981 Stella981
3年前
Kafka 中两个重要概念:主题与分区
在Kafka中还有两个特别重要的概念—主题(Topic)与分区(Partition)。Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到Kafka集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。这里补充了对Kafka基本概念(https://www.oschina.net/action
京东云开发者 京东云开发者
10个月前
浅谈kafka
作者:京东科技徐拥导读:当今大数据时代,高吞吐、高可靠成为了分布式系统中重要的指标。而ApacheKafka作为一个高性能、分布式、可扩展的消息队列系统,被越来越多的企业和开发者所关注和使用。在本文中,我们将介绍Kafka的基本概念,包括Kafka的架构、