目录

  • Kafka的基本介绍
  • Kafka的设计原理分析
  • Kafka数据传输的事务特点
  • Kafka消息存储格式
  • 副本(replication)策略
  • Kafka消息分组,消息消费原理
  • Kafak顺序写入与数据读取
  • 消费者(读取数据)

Kafka的基本介绍

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。

Kafka主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
  • 同时支持离线数据处理和实时数据处理。

Kafka的设计原理分析

一个典型的kafka集群中包含若干producer,若干broker,若干consumer,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到broker,consumer使用pull模式从broker订阅并消费消息。

Kafka专用术语:

  • Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
  • Topic:一类消息,Kafka集群能够同时负责多个topic的分发。
  • Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。
  • Segment:partition物理上由多个segment组成。
  • offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息。
  • Producer:负责发布消息到Kafka broker。
  • Consumer:消息消费者,向Kafka broker读取消息的客户端。
  • Consumer Group:每个Consumer属于一个特定的Consumer Group。

Kafka数据传输的事务特点

  • at most once:最多一次,这个和JMS中"非持久化"消息类似,发送一次,无论成败,将不会重发。消费者fetch消息,然后保存offset,然后处理消息;当client保存offset之后,但是在消息处理过程中出现了异常,导致部分消息未能继续处理。那么此后"未处理"的消息将不能被fetch到,这就是"at most once"。
  • at least once:消息至少发送一次,如果消息未能接受成功,可能会重发,直到接收成功。消费者fetch消息,然后处理消息,然后保存offset。如果消息处理成功之后,但是在保存offset阶段zookeeper异常导致保存操作未能执行成功,这就导致接下来再次fetch时可能获得上次已经处理过的消息,这就是"at least once",原因offset没有及时的提交给zookeeper,zookeeper恢复正常还是之前offset状态。
  • exactly once:消息只会发送一次。kafka中并没有严格的去实现(基于2阶段提交),我们认为这种策略在kafka中是没有必要的。

通常情况下"at-least-once"是我们首选。

Kafka消息存储格式

Topic & Partition

一个topic可以认为一个一类消息,每个topic将被分成多个partition,每个partition在存储层面是append log文件。

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。

  • 每个partion(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中。但每个段segment file消息数量不一定相等,这种特性方便old segment file快速被删除。
  • 每个partiton只需要支持顺序读写就行了,segment文件生命周期由服务端配置参数决定。

这样做的好处就是能快速删除无用文件,有效提高磁盘利用率。

  • segment file组成:由2大部分组成,分别为index file和data file,此2个文件一一对应,成对出现,后缀".index"和“.log”分别表示为segment索引文件、数据文件.
  • segment文件命名规则:partion全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值。数值最大为64位long大小,19位数字字符长度,没有数字用0填充。

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

需要免费领取这份Kafka源码笔记的铁汁们,麻烦帮忙转发一下这篇文章+关注我,然后戳这里免费获取!

们,麻烦帮忙转发一下这篇文章+关注我,然后戳这里免费获取!**

Java开发全套学习!java微服务网关相关推荐

  1. Java开发面试题目,微服务架构开发实战

    面试失败之后 在这之后的很长一段时间后,他没敢再去面试,觉得自己太丢人.技术太差不敢去谈论技术话题.后来他渐渐开始看网上的文章,知道要刷leetcode,看面经,然后之后一年多的时间,边上课,边刷题, ...

  2. Java开发全套学习!java判断字符串中是否包含中文

    第一个暴击:Spring 上一份Spring的手绘思维脑图(就像是个知识大纲总结),预览一下Spring的知识点,心里有个谱.不过这边我是采用的截图方式,为了把全部的内容都截取出来,所以整个就比较小, ...

  3. Java开发全套学习!mysql配置文件my.ini找不到

    一.不少培训班候选人的简历中,缺乏足够的商业项目年限 不少同学会有这样得感受:投出去不少简历,但就没有面试机会,对培训班出身的朋友来说,可能这种情况更甚,原因是,这些简历没过筛选. 没过筛选的原因无非 ...

  4. Java生鲜电商平台-微服务入门与服务的拆分架构实战

    Java生鲜电商平台-微服务入门与服务的拆分架构实战 刚开始进入软件行业时还是单体应用的时代,前后端分离的概念都还没普及,开发的时候需要花大量的时间在"强大"的JSP上面,那时候S ...

  5. Java开发需要学习哪些知识?初学者怎么学好Java开发?

    根据IDC的统计数字,在所有软件开发类人才的需求中,对Java工程师的需求达到全部需求量的60%~70%,对软件开发人才的需求达到了20%,还同时以每年20%的速度在增长.由此,我国不仅在软件开发人才 ...

  6. java开源项目及spring微服务架构

    开源项目地址:weiit - NO.1的数字化零售SaaS开源方案商(Java企业级开源SaaS服务商) 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA 架构到微服务架构的过程 ...

  7. Java生鲜电商平台-微服务架构概述

    Java生鲜电商平台-微服务架构概述 单体架构存在的问题 在传统的软件技术架构系统中,基本上将业务功能集中在单一应用内,或者是单一进程中.尽管现代化的软件架构理论以及设计原则已推广多年,但实际技术衍化 ...

  8. Java生鲜电商平台-微服务生鲜电商用户中心的系统设计(小程序/APP)

    Java生鲜电商平台-微服务生鲜电商用户中心的系统设计(小程序/APP) 说明:在微服务生鲜电商用户中心的系统设计中,我一直强调一个观点,就是你这个系统使用用户到底是TO B的还是TO C的呢?这个是 ...

  9. Java开发的学习路线

    Java开发的学习路线 前言 一.java入门级开发 1.Java基础加提升 2.Javaweb 3.Java框架 4.Java项目 二.夯实基础 1.Java基础 2.Java设计模式 3.Java ...

最新文章

  1. WEB数据挖掘(八)——Aperture数据抽取(4):Aperture整体结构
  2. 如何维护关键字_SEO人如何制定工作计划?【大站】
  3. Jquery学习笔记:获取jquery对象的基本方法
  4. 【script】python requests模块中cookie的使用
  5. Memory Notification: Library Cache Object loaded into SGA问题
  6. 使用Python编写打字训练小程序
  7. 外设键盘_记得那个被称为‘顶级外设’的国产品牌吗,现在推出这样一把键盘...
  8. android 内存对齐,Go struct 内存对齐
  9. 华为hg-526拨号加路由破解简介
  10. 收集4:文件打开方式
  11. POJ 2236 Wireless Network
  12. MySQL Innodb Engine -- 文件格式(innodb_file_format)
  13. Win32API编程_切换窗口
  14. 电脑屏幕莫名其妙变成绿色
  15. js 剩余时间,天,小时,分钟,秒
  16. 怎么让Win10不显示快速访问记录
  17. error: cannot open Packages database in /var/lib/rpm
  18. 面试官: 说一下前端组件设计的原则
  19. zigbee_蓝牙_wifi的比较与区别分析
  20. 微信小程序之wx.getLocation再次授权问题解决

热门文章

  1. 2021-2025年中国窗帘行业市场供需与战略研究报告
  2. Flutter 成功在鸿蒙上运行;微信 8.0 发布;支付宝和微信支付达到反垄断标准 | 极客头条...
  3. 让软件自己写软件,英特尔的机器编程会取代程序员吗?
  4. 求求了!让 Python 的热搜消失吧!!
  5. 面向自动驾驶行业,Imagination推出性能高达600 TOPS的多核AI加速器
  6. AI 看脸算命,3 万张自拍揭露:颜值即命?
  7. Yann LeCun 会成为下一个居里夫人吗?
  8. 被高估了的测试驱动开发?
  9. 从开源开发者身上学到的 5 种品质
  10. MySQL 面试必备 8 个知识点