Kafka知识梳理

这篇具有很好参考价值的文章主要介绍了Kafka知识梳理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是kafka

一款开源的分布式数据流处理平台,可以实时发布、订阅、存储和处理数据流。

作用与特点

Kafka 主要起到削峰、系统解耦的作用。
主要特点有:

  1. 高吞吐、低延时:这是 Kafka 显著的特点,Kafka 能够达到百万级的消息吞吐量,延迟可达毫秒级;
  2. 持久化存储:Kafka的消息最终持久化保存在磁盘之上,提供了顺序读写以保证性能,并且通过 Kafka的副本机制提高了数据可靠性。
  3. 分布式可扩展:Kafka 的数据是分布式存储在不同 broker 节点的,以 topic 组织数据并且按 partition 进行分布式存储,整体的扩展性都非常好。
  4. 高容错性:集群中任意一个 broker 节点宕机,Kafka 仍能对外提供服务。

术语解释

  1. Broker:一个Kafka服务端节点。
  2. 集群:由多个Broker组成的集合。
  3. Producer:生产者,推送消息。
  4. Consumer:消费者,拉取消息进行消费。
  5. Consumer Group:消费组由若干个消费者组成,一条消息只能被消费组中一个Consumer消费。
  6. Topic:主题,服务端消息的逻辑存储单元。一个 topic 通常包含若干个 Partition 分区。
  7. Partition:topic的分区,分布式存储在各个 broker 中, 实现发布与订阅的负载均衡。若干个分区可以被若干个 Consumer同时消费,达到消费者高吞吐量。一个分区拥有多个副本(Replica)。
  8. Message:消息,或称日志消息,是 Kafka 服务端实际存储的数据,每一条消息都由一个 key、一个 value 以及消息时间戳 timestamp 组成。
  9. Rebalance:是让一个消费组的所有消费者就如何消费订阅 topic 的所有分区达成共识的过程。
  10. 位点: 消息到达分区时被指定的序列号。
  11. 最小位点: 分区的最小位点,即当前分区的首条消息的位点。
  12. 最大位点: 分区的最大位点,即当前分区的最新消息的位点。
  13. 消费位点: 分区被当前Consumer消费了的消息的最大位点。
  14. 堆积量Lag: 当前分区下的消息堆积总量,即最大位点减去消费位点的值。

注意点

  1. topic对应的多个消费组互不干扰,类似RabbitMQ的广播模式。

  2. 分区和消费组
    Kafka知识梳理,kafka

    kafka cluster中有两台broker服务器,每一台都有两个分区,这四个分区都是同一个topic下的。下左的消费者组A,组内有两个消费者,每个消费者负责两个分区的消费,而右边的消费者组B有四个消费者,每个负责消费一个分区。

    为什么每个分区只从属于组中的一个消费者?
    Kafka它在设计的时候就是要保证分区下消息的顺序。如果组中多个消费者可以消费同一个分区,那么多个消费者各自拉取未消费的消息会产生重复消费。例如消费者C1消费offset:100的消息,但还未完成提交。消费者C2进行拉消息则会再次拉取到offset:100的消息,产生重复消费。

    劣势是无法让同一个 consumer group 里的 consumer 均匀消费数据;优势是每个 consumer 不用都跟大量的 broker 通信,减少通信开销,同时也降低了分配难度,实现也更简单。另外,因为同一个 partition 里的数据是有序的,这种设计可以保证每个 partition 里的数据也是有序被消费。同一时刻,一条消息只能被组中的一个消费者实例消费

    • 分区数>消费组中的消费者实例数
      存在一个消费者会负责多个分区。
    • 分区数=消费组中的消费者实例数
      一个消费者负责一个分区。
    • 分区数=消费组中的消费者实例数
      部分消费者是多余的,处于空闲状态。
  3. 重复消费
    消费端已经消费了数据,但是offset没来得及提交。
    常见原因在于: reblance
    常见处理方式

    • 增加max.poll.interval.ms、session.timeout.ms
    • 减少max.poll.records
    • 提高业务逻辑处理速度
  4. 提高消费速度
    提高消费速度有以下两个办法:

    • 增加Consumer实例个数。
      可以在进程内直接增加(需要保证每个实例对应一个线程,否则没有太大意义),也可以部署多个消费实例进程;需要注意的是,实例个数超过分区数量后就不再能提高速度,将会有消费实例不工作。
    • 增加消费线程。
      增加Consumer实例本质上也是增加线程的方式来提升速度,因此更加重要的性能提升方式是增加消费线程,最基本的步骤如下:
      • 定义一个线程池。
      • Poll数据。
      • 把数据提交到线程池进行并发处理。
      • 等并发结果返回成功后,再次poll数据执行。
  5. 消费失败

    • 失败后一直尝试再次执行消费逻辑。这种方式有可能造成消费线程阻塞在当前消息,无法向前推进,造成消息堆积。
    • 打印失败的消息或者存储到某个服务(例如创建一个Topic专门用来放失败的消息),然后定时检查失败消息的情况,分析失败原因,根据情况处理。【推荐】
  6. 消息推拉模式
    拉模式,对于推拉模式具体可以参考另外一篇博文消息队列之推拉模式文章来源地址https://www.toymoban.com/news/detail-805922.html

到了这里,关于Kafka知识梳理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kafka相关知识

    Broker:kafka集群中的实例 Topic:队列的主题,逻辑概念; Partition:Topic分区,物理概念,同意parttion内消息有序; Producer Consumer:生产消息的客户端 消费消息的客户端,kafka认为是服务器。 将每个Topic划分为多个分区Partition,每个分区时一组有序的消息日志,分区内每条消息都

    2024年02月03日
    浏览(25)
  • kafka 理论知识

    Kafka是一个分布式的消息订阅系统 消息被持久化到一个topic中, topic是按照“主题名-分区”存储的 ,一个topic可以分为多个partition,在parition(分区)内的 每条消息都有一个有序的id号 ,这个 id号被称为偏移(offset ),记录 消息的消息位置** Partition是Kafka中数据分布的基本单位,

    2024年02月14日
    浏览(28)
  • Kafka知识概况

    消息队列简介: 目 前企业中比较常见的消息队列产 品主 要有 Kafka、ActiveMQ 、RabbitMQ 、RocketMQ 等。 在大数据场景主要采用 Kafka 作为消息队列。在 JavaEE 开发中主要采用 ActiveMQ、 RabbitMQ、RocketMQ。 传统的消息队列的主要应用场景包括:缓存/消峰、解耦和异步通信。 ①缓冲/消

    2024年02月07日
    浏览(29)
  • Kafka入门05——基础知识

    目录 副本数据同步原理 HW和LEO的更新流程 第一种情况 第二种情况 数据丢失的情况 解决方案 Leader副本的选举过程 日志清除策略和压缩策略 日志清除策略 日志压缩策略 Kafka存储手段 零拷贝(Zero-Copy) 页缓存(Page Cache) Kafka的消息可靠性 在ISR中,只要有一个Follower存活就能

    2024年02月08日
    浏览(47)
  • KafKa集群搭建和知识点

    KafKa是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据试试处理领域 是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理

    2024年02月13日
    浏览(36)
  • kafka知识点全方位讲解

    Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。 Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。 Kafka是一个分布式消息队列:

    2023年04月25日
    浏览(44)
  • 【运维知识大神篇】超详细的ELFK日志分析教程10(kafka集群原理+基本使用+zookeeper和kafka堆内存调优+kafka监控和压力测试+filebeat和logstash对接kafka)

    本篇文章继续给大家介绍ELFK日志分析,我们先前介绍了ELFK架构,zookeeper部署使用,kafka的部署,仅差kafka使用就将整个体系融汇贯通了。我们本篇文章将以kafka为核心,详细介绍kafka使用,最终将kafka融入ELFK架构中,大致内容见下面目录。 目录 kafka集群原理 一、专业术语 二、

    2024年02月04日
    浏览(71)
  • Kafka 3.0 基础知识 + 原理 (了解一篇就够)

    简述: 首先main线程作为消息生产的主线程,经过拦截器(处理消息),再到序列化器(非JDK自带),最后到分区器,分区器维护 Record Accumulator(消息累加器),用于将多个消息合并成一个批次。 Sender线程是专门用于消息发送的线程,当 Record Accumulator中的 双端队列的batch

    2023年04月13日
    浏览(48)
  • Kafka 之生产者与消费者基础知识:基本配置、拦截器、序列化、分区器

    kafaf集群地址列表:理论上写一个节点地址,就相当于绑定了整个kafka集群了,但是建议多写几个,如果只写一个,万一宕机就麻烦了 kafka消息的key和value要指定序列化方法 kafka对应的生产者id 使用java代码表示则为以下代码:  可使用 retries 参数 进行设置,同时要注意记住两

    2024年02月05日
    浏览(55)
  • Java8知识梳理

    速度更快 代码更少( Lambda表达式 ) 引入强大的 Stream API 便于并行 最大化减少空指针异常( Optional ) Nashorn 引擎,允许在JVM上运行 js 应用 并行流 就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。相比较串行的流,并行的流可以很大程度上提高程

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包