首页 > 其他分享 >Kafka架构深入

Kafka架构深入

时间:2023-04-25 14:13:06浏览次数:36  
标签:架构 log hadoop kafka 深入 消息 test 00000000000000000000 Kafka

 

1. 消息队列

1.1 传统消息队列的应用场景

MQ传统应用场景之异步处理

1.2 消息队列的两种模式

1) 点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)

  消息生产者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费消息。

消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费

2)  发布/订阅模式(一对多,消费者消费数据之后不会清除消息)

  消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。

1.2 Kafka基础架构

  • Producer: 消息生产者,就是向kafka broker 发送消息的客户端
  • Consumer: 消息消费者,向kafka broker 取消息的客户端
  • Consumer Group : 消费者组,由多个consumer组成,消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个消费者消费,消费者组之间互补影响。

所有的消费者都属于某个消费者组。

  • Broker: 一个kafka服务器就是一个broker,一个集群由多个broker组成,一个broker可以容纳多个topic
  • Topic: 可以理解一个队列
  • Partition: 为了实现扩展性,一个非常大的topic可以分布到多个broker上,一个topic可以分为多个partition,每个partition 是一个有序的队列。
  • Replica:  副本,为了保证集群的某个节点发生故障时,该节点上的partition 数据不丢失,且kafka仍然能继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader 和若干个follower
  • Leader: 每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader
  • Follower: 每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步,leader发生故障时,某个follower会成为新的leader

2. Kafka工作流程

Kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的。

topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是producer生产的数据。Producer生产的数据会被不断追加到该log文件末端,且每条数据都有自己的offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个offset,以便出错恢复时,从上次的位置继续消费。

3. Kafka 文件存储机制

由于生产者生产的消息会不断追加到log文件末尾,为防止log文件过大导致数据定位效率低下,Kafka采取了分片索引机制,将每个partition分为多个segment。每个segment对应两个文件——“.index”文件和“.log”文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic名称+分区序号。例如,test这个topic有三个分区,则其对应的文件夹为test-0,test-1,test-2

-rw-rw-r--. 1 hadoop hadoop 10485760 4月  24 23:55 00000000000000000000.index
-rw-rw-r--. 1 hadoop hadoop        0 4月  24 23:55 00000000000000000000.log
-rw-rw-r--. 1 hadoop hadoop 10485756 4月  24 23:55 00000000000000000000.timeindex

index和log文件以当前segment的第一条消息的offset命名。下图为index文件和log文件的结构示意图

“.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中message的物理偏移地址。

3.1 kafka数据的存储位置和文件内容

  查看kafka安装目录的配置文件config/server.properties

log.dirs=/opt/module/kafka_2.11-2.4.1/logs

  创建一个有三个分区,2个副本的 test主题

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 3 --topic test
[hadoop@hadoop1 logs]$ ls /opt/module/kafka_2.11-2.4.1/logs/
test-1
test-2
[hadoop@hadoop2 logs]$ ls /opt/module/kafka_2.11-2.4.1/logs/
test-0
test-2
[hadoop@hadoop3 ~]$ ls /opt/module/kafka_2.11-2.4.1/logs/
test-0
test-1

查看segment file

[hadoop@hadoop1 logs]$ cd test-1/
[hadoop@hadoop1 test-1]$ ll
总用量 8
-rw-rw-r--. 1 hadoop hadoop 10485760 4月  24 23:55 00000000000000000000.index
-rw-rw-r--. 1 hadoop hadoop      147 4月  25 00:10 00000000000000000000.log
-rw-rw-r--. 1 hadoop hadoop 10485756 4月  24 23:55 00000000000000000000.timeindex

查看log文件

[hadoop@hadoop1 test-1]$ kafka-run-class.sh  kafka.tools.DumpLogSegments --files  00000000000000000000.log  --print-data-log

Dumping 00000000000000000000.log
Starting offset: 0
baseOffset: 0 lastOffset: 0 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false position: 0 CreateTime: 1682352602628 size: 79 magic: 2 compresscodec: NONE crc: 1291193145 isvalid: true
| offset: 0 CreateTime: 1682352602628 keysize: -1 valuesize: 11 sequence: -1 headerKeys: [] payload: kafka flume
baseOffset: 1 lastOffset: 1 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false position: 79 CreateTime: 1682352614290 size: 68 magic: 2 compresscodec: NONE crc: 2089698590 isvalid: true
| offset: 1 CreateTime: 1682352614290 keysize: -1 valuesize: 0 sequence: -1 headerKeys: [] payload:

payload:为消息体 

查看index文件

[hadoop@hadoop1 test-1]$ kafka-run-class.sh  kafka.tools.DumpLogSegments --files 00000000000000000000.index  --print-data-log
Dumping 00000000000000000000.index
offset: 0 position: 0

查看timeindex文件

[hadoop@hadoop1 test-1]$ kafka-run-class.sh  kafka.tools.DumpLogSegments --files 00000000000000000000.timeindex  --print-data-log
Dumping 00000000000000000000.timeindex
timestamp: 0 offset: 0
Found timestamp mismatch in :/opt/module/kafka_2.11-2.4.1/logs/test-1/00000000000000000000.timeindex
  Index timestamp: 0, log timestamp: 1682352602628

 

标签:架构,log,hadoop,kafka,深入,消息,test,00000000000000000000,Kafka
From: https://www.cnblogs.com/qikaipei/p/17351364.html

相关文章

  • 深入理解C#泛型:new与where关键字全解析
    C#泛型中new和where是重要的关键字,它们都可以用于约束泛型类型参数的限制;它们都用于提高代码的安全性和可用性,它们的作用在很大程度上提高了代码的可读性和可维护性。在这篇文章中,我们将一起了解泛型中的new和where,以及它们之间的区别。1.new关键字在C#泛型中,new关键字被用于指......
  • springboot项目配置多个kafka
    1.spring-kafka<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>1.3.5.RELEASE</version></dependency>2.配置文件相关信息kafka.bootstrap-servers=local......
  • kubernetes集群的高可用架构
    概述kubernete在云平台的高可用分为两种情形单az的高可用集群搭建多az的高可用集群搭建这两种情形其实就是一个k8s集群内部的高可用,只是多az的场景下能够实现更高级别的高可用,此时k8s需要跨az部署集群。集群内部的高可用需要实现基础组件的高可用,其中最重要的就是etcd和api......
  • elasticsearch+filebeat+kafka+kibana——filbeat篇章——overview
    filbeat篇章——overviewhttps://www.elastic.co/guide/en/beats/filebeat/8.7/filebeat-overview.html#filebeat-overview Filebeatisalightweightshipperforforwardingandcentralizinglogdata.Installedasanagentonyourservers,Filebeatmonitorsthelog......
  • .NET CORE开源 DDD微服务 支持 多租户 单点登录 多级缓存、自动任务、分布式、日志、
    源代码地址https://github.com/junkai-li/NetCoreKevin基于NET6搭建跨平台DDD思想WebApi架构、IDS4单点登录、多缓存、自动任务、分布式、多租户、日志、授权和鉴权、CAP、SignalR、docker部署 如需简约项目可直接去除项目引用解耦设计都可以单独引用架构默认全部引用并启动......
  • kafka设计理念解析
    一.引言kafka是广泛使用的流处理组件,我们知道怎么使用它,也知道它的实现原理。但是更重要的部分是它的设计理念,即kafka设计者当时是如何考量各种方案的,了解这些,对提升我们的设计能力非常有帮助。二.动机我们将Kafka设计为一个统一平台,来处理大型公司可能拥有的所有实时数据流......
  • 【深入浅出Spring原理及实战】「源码调试分析」深入源码探索Spring底层框架的的refres
    学习Spring源码的建议阅读Spring官方文档,了解Spring框架的基本概念和使用方法。下载Spring源码,可以从官网或者GitHub上获取。阅读Spring源码的入口类,了解Spring框架的启动过程和核心组件的加载顺序。阅读Spring源码中的注释和文档,了解每个类和方法的作用和用法。调试Spring源码,可以......
  • java架构师视频教程
    我真的希望大家能坚持学完我的这套java架构师视频教程,我知道这的确要花费很多的时间和精力,还有大量的练习,我在开始学习的时候也和大家一样的厌倦学习,中途想要放弃。但想想看,既然知道我的这套java架构师的确是非常有效果的,并能改变我们的技术能力,让我们在工作中一生受益,那为什么不......
  • 当⻉借⼒阿⾥云落地云原⽣架构转型,运维降本、效率稳定性双升
    作者:当贝技术团队随着业务飞速发展,当贝的传统IT资产也渐显臃肿,为了避免制约发展的瓶颈,痛定思痛,技术团队果断变革:核心业务云原生化之后,运维效率、整体稳定性和研发效率均得到了全面提升。本文主要简述当贝技术团队云原生之路的背景诉求、落地方法和收获成果。前言当贝成立于2013......
  • 【已结束】直播预告|传统 PvE 游戏 ∕ 开房间 PvP 游戏的云原生架构升级
    OpenKruiseGame(OKG) 是阿里云和国内多家一线游戏头部公司一起孵化的云原生游戏开源项目,旨在将云原生的能力通过OpenKruiseGame更好的传达给游戏服,降低学习成本,提高使用效率,助力游戏基础架构云原生转型。OpenKruiseGame在社区开源半年以来,得到了游戏行业的广泛关注,其游戏服以序......