KafKa基本原理

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

简介

分布式,分区,多副本,zk协调的分布式消息系统

使用场景

日志收集 消息系统 用户活动跟踪 运营指标

对数据安全要求不高的场景

核心组成部分

broker topic producer consumer consumergroup partition

原理

通信基于tcp协议

很多集群信息记录在zk里保证自己的无状态,方便水平扩容

leader处理partition的读写请求,followers被动复制leader,不提供读写保证多副本与消费一致性

一个partition同一个时刻在一个consumer group中只能有一个consumer instance在消费

Controller

本身是broker

分区leader副本故障选新leader

分区isr集合变化通知broker更新元数据

topic增加分区数量,让新分区被其他节点感知

监听broker的变化

监听topic的变化

从zk获取topic, partition, broker信息,监听topic分区分配变化

更新集群元数据并同步到普通的broker中

启动broker再zk上创建/controller临时节点,成功的为Controller,挂掉重新选

Partition副本选leader机制

从isr列表选第一个broker作为leader

unclean.leader.election.enable 配置是否可以在isr以外的列表选

replica.lag.time.max.ms 配置与leader同步滞后的副本

消费者消费记录offset

consumer定期提交offset: _consumer_offset, key是consumerGroupId+topic+分区号,value是offset值,默认分配50个分区用于支持高并发

hash(consumerGroupId) % _consumer_offsets(主题的分区数)

消费者rebalance机制

触发时机:消费组里消费者数量变化,消费分区数变化,消费组订阅了更多的topic

rebalance过程中,消费者无法从kafka消费消息

range、round-robin、sticky

Rebalance过程

选择分组协调器 提交offset的分区leader所在的broker

加入消费组 协调器选第一个加入group的consumer为leader(消费协调器,负责制定分区方案)

sync group 分区方案发给分组协调器,分组协调器下发给各个consumer

producer发布消息机制

写入方式 push append patition 顺序写

路由

指定patition

未指定patition但指定key, 通过key的value hash选出

patition和key都未指定,轮询

写入流程

zk的"/brokers/.../state" 节点找到该 partition 的 leader

发送消息

leader写入本地log

followers从leader pull消息,写入本地log返回ack

leader收到所有isr的replica的ack,增加HW并向producer发送ack

LEO & HW

每个partition的log最后一条Message的位置

一个partition对应的ISR中最小的LEO(log-end-offset)作为HW

日志分段存储

一个分区的消息数据在一个文件夹下,topic+分区号命名,消息分段存储

segment file最大1G

.index .log .timeindex

每次往分区发4K(可配置)消息就会记录一条当前消息的offset到index文件

每次往分区发4K(可配置)消息就会记录一条当前消息的发送时间戳与对应的offset到timeindex文件

数字表示日志段包含的起始offset

问题

消息丢失

min.insync.replicas配置备份个数

发送端 消费端

重复消费

发送端 消费端

乱序

发送端 消费端

消费者端接收到消息后将需要保证顺序消费的几条消费发到内存队列(可以搞多个),一个内存队列开启一个线程顺序处理

消息积压

修改消费端程序,让其将收到的消息转发到其他topic(可以设置很多分区),再启动多个消费者同时消费新主题的不同分区。

bug导致一直消费不成功,转发到其它队列里去(类似死信队列),后面再慢慢分析死信队列里的消息处理问题

延时队列

消息回溯

一般情况分区数跟集群机器数量相当就差不多了,实际靠压测

吞吐量的数值和走势还会和磁盘、文件系统、 I/O调度策略等因素相关

消息传递保障

at most once ,acks=0

at least once ,acks=-1

exactly once ,at least once+消费幂等

kafka生产者的幂等

生产者加上参数 props.put(“enable.idempotence”, true)

PID和Sequence Number和消息绑定,相同不再接收

每个新的 Producer 在初始化的时候会被分配一个唯一的 PID

Producer 发送到每个 Partition 的数据都有对应的序列号,从0递增

 文章来源地址https://www.toymoban.com/news/detail-770194.html

 

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

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

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

相关文章

  • Kafka核心设计与实践原理:设计理念、基本概念、主要功能与应用场景

    详细介绍Kafka作为分布式流式处理平台的设计理念、基本概念,以及其主要功能与应用场景,包括消息系统、容错的持久化、流式处理平台等功能,同时探讨如何保证消息的唯一性、消费顺序等问题。

    2024年02月22日
    浏览(37)
  • kafka基本使用及结合Java使用

    Kafka是一个分布式、支持分区、多副本的消息系统,最大特点是实时处理大量数据以满足各种需求场景。它可以用于日志收集、消息系统、用户活动跟踪、运营指标等。Kafka是用Scala语言编写的,于2010年贡献给了Apache基金会并成为顶级开源项目。 实时数据流处理 :Kafka可以接

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

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

    2024年02月04日
    浏览(49)
  • kafka发布订阅原理,Java项目开发如何设计整体架构

    源码阅读,最核心有三点:技术基础+强烈的求知欲+耐心。 1.1 设计模式(45设计模式:介绍+优缺点+应用实例+源代码+解决问题) 1.2 Spring复习大纲:依赖注入Ioc+Beans+注解+数据访问+AOP+MVC等 1.3 Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC 面试题(含解析)+学习书籍+学习

    2024年03月12日
    浏览(50)
  • kafka延时队列原理,Java开发中遇到最难的问题

    Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么? Dubbo 的整体架构设计有哪些分层? 什么是 Spring Boot?以及Spring Boot的优劣势? 你如何理解 Spring Boot 中的 Starters? 服务注册和发现是什么意思?Spring Cloud 如何实现? Spring Cloud断路器的作用

    2024年03月21日
    浏览(37)
  • 32个Java面试必考点-09(上)消息队列Kafka架构与原理

    本课时主要讲解消息队列与数据库相关的知识,重点讲解三部分知识点: 1.Kafka 的架构与消息交互流程; 2.数据库事务的 4 大特性和分类; 3.MySQL 相关的内容,比如索引、MySQL 调优等。 消息队列与数据库知识点 先来看看相关知识点汇总,如下图。首先为了防止歧义进行说明

    2024年02月20日
    浏览(29)
  • Java小案例-RocketMQ的11种消息类型,你知道几种?(RocketMQ基本的原理)

    为了让大家对mq理解的更深首先在这里我通过三个问题来给大家解答一下。 第一个:生产者如何发送消息 第二个:发送的消息存在哪里 第三个:消费者如何消费消息 首先给大家介绍一下Mq中的角色,以及每个都是干什么的。 RocketMQ是一个分布式消息和流平台,提供低延迟、

    2024年02月05日
    浏览(31)
  • Kafka - 深入了解Kafka基础架构:Kafka的基本概念

    我们首先了解一些Kafka的基本概念。 1)Producer :消息生产者,就是向kafka broker发消息的客户端 2)Consumer :消息消费者,向kafka broker获取消息的客户端 3)Consumer Group (CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个broker可以有多个

    2024年02月08日
    浏览(27)
  • 大数据 - Kafka系列《一》- Kafka基本概念

    目录 🐶1.1 什么是kafka 🐶1.2 Kafka可以用来做什么 🐶1.3 kafka的特点 🥙1. 高吞吐量、低延迟 🥙2. 可扩展性 🥙3. 持久性、可靠性 🥙4. 容错性 🥙5. 高并发 🐶1.4 Kafka的基本架构 1. 🥙Producer:生产者 2. 🥙Broker:中间组件,存储数据 Topic:主题。类似于表的概念 partition:分区。

    2024年01月20日
    浏览(28)
  • kafka--技术文档-基本概念-《快速了解kafka》

    学习一种新的消息中间键,卡夫卡!!! 官网网址 Apache Kafka         Kafka是一种开源的分布式流处理平台,由Apache软件基金会开发,用Scala和Java编写。它是一个高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据。这种动作可以是网页浏览、

    2024年02月11日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包