1. Kafka是一个分布式流处理平台:

  1. 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。
  2. 可以储存流式的记录,并且有较好的容错性。
  3. 可以在流式记录产生时就进行处理。

2. 消息系统:

定义

  1. 将数据从一个应用程序传递到另一个应用程序,通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
  2. 分布式系统利用消息系统,在多应用之间进行高效、稳定、安全的数据传递。
  3. 应用场景有跨系统数据传递、高并发流量削峰、数据异步处理。

两种消息模式:

  1. 点对点:若干个生产和消费者,处理队列当中的数据,一旦该数据被消费,则从队列当中被移除。(多线程:生产消费者模型)
  2. 发布-订阅:消息是被保留在主题当中,消费者一个消费一个或者若干个主题当中的消息

3. kafka的一些概念

1. 术语:

术语 术语
Topics(主题) Kafka Cluster(Kafka集群)
Partition(分区) Producers(生产者)
Partition offset(分区偏移) Consumers(消费者)
Replicas of partition(分区备份) Leader(领导者)
Brokers Follower(追随者)

2. 发布和订阅的流程

  1. 生产者向topic当中提交消息,Brokers将topic当中的数据在对应的分区当中依次保存;
  2. 消费者向Brokers请求获取消息,Brokers向消费者提供偏移量,消费者根据偏移量要求获取消息。
  3. 消费者排队的前提,消费者数量大于分区数量
  4. 同一个消费者组内的消息不会重复消费。

3. 生产者:

主要是消息提供者,根据业务需要往指定的topic推消息,一般也俗称为消息的上游。

4. 消费者:

  1. 要指定消费者的分组:默认情况下,分组是test
  2. 消费者可以同时消费若干个topic:
    1. 消息是已key-value格式进行发送
    2. 每个key如果重复发送,其偏移量会递增
    3. 新key的偏移量从0开始
  3. 消费者要放在一个独立的线程当中,才能始终处于消费状态
  4. Spring是没有办法直接给线程当中进行依赖注入的
  5. 消费者的线程如果要通知其他的任务执行,需要从Spring的bean当中获取相关的业务对象

5. kafka写消息的路由策略

  1. 如果指定分区:直接使用分区进行路由
  2. 指定了key,但是没有指定分区,那么会对key进行hash运算,通过运算的值得到一个分区
  3. 如果都没指定,那么会轮询写入一个分区

6. kafka写硬盘:

  1. 传统写硬盘是随机写
  2. kafka是顺序写硬盘,是随机写硬盘速度的6000倍
  3. 写数据的流程
    1. 首先找到leader
    2. 将消息写入leader的日志文件
    3. Followers(包含ISR中的成员,也包含不在ISR中的成员)会同步leader当中的消息,同步完以后会向leader发送一个ACK确认。
    4. leader在接收到isr所有成员的ACK确认后,正式提交commit保存

7. kafka的消息安全策略:

  1. 默认是保证一定成功(同步)
  2. 不重复发送,不保证成功(异步)

8. kafka的备份:

  1. 备份是由分区来创建的
  2. 一个分区有1个leader和0-n个follower,只要leader不宕机,所有的follower都宕机了也不影响读写。follower只负责数据备份,不负责数据读写。

9. Kafka的isr:

  1. 同步备份:保证isr集合当中至少存活一个,如果leader不挂,正常提供服务,如果leader挂了,重新选leader然后提供服务;每个分区都有自己的isr

    1. 备份的算法:

    1. 分区:分区编号,取余代理数量 (p_i mod b_num)

    2. 备份:分区编号 + 备份编号之和, 取余 代理数量(p_i+r_j) mod b_num
  2. 判定存活:配置延时replica.log.max.messages,replica.log.time.max.ms来判定是否宕机
  3. kafka如何解决zookeeper的压力的
    1. Kafka有容器机制
    2. 每一个代理会创建一个新的容器
    3. 容器负责维护leader的读写,和选举
  4. leader是在zk上竞争创建节点来获取leader资格,如果leader宕机,选举策略是所有的follower(ISR当中保存的成员)重新竞争创建节点,获取leader资格;容器会记录新的leader,并保持
  5. 如果所有的ISR成员都死亡:
    1. 等待ISR成员任意一个苏醒,但是这个过程是不可控的
    2. 默认:只要有一个不是isr的成员存活,把这个作为新的leader。但是并不能保证这个成员是否数据和原本leader数据一致。

10. kafka的数据保存:

  1. Kafka的日志分为两种,一种是运行日志;还有一种是用于保存消息的日志;
  2. 一个分区对应日志当中的一个目录
    1. 索引文件
    2. 数据文件
      1. 数据长度
      2. 数据类型
      3. 时间戳
      4. 偏移量
      5. Key
      6. Value
      7. 头信息
    3. 数据保留策略
      1. 时间:
      2. 大小:
      3. 注意:清理数据对kafka的读写没有任何影响
      4. Kafka是在硬盘磁道上进行顺序读写,所以性能和文件大小没有任何关系

11. topic的创建和删除流程:

  1. 创建topic,是首先获取代理的ids,然后将这些ids组成一个isr,作为一个新的容器
  2. 删除topic:

    1. 默认情况下delete.topic.enable=false;也就是被删除的节点会被移入zk的这个节点/admin/delete_topics

    2. 要彻底删除

    1. delete.topic.enable=true:一旦删除,容器会清空在/admin/delete_topics节点上的监听
    2. auto.create.topics.enable=false:自动创建主题,如果他为true,那么只要还有一个用户在往这个主题当中写消息,这个主题就不会真正被删除。即便是你已经删了,他依然还会创建一个出来。

kafka入门必备知识的更多相关文章

  1. Python 基础:入门必备知识

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:程序员野客 先看下咱们的基础目录1 标识符2 关键字3 引号4 编码5 ...

  2. 浅谈JavaWEB入门必备知识之Servlet入门案例详解

    工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详 ...

  3. Flum入门必备知识

    1.flume概念 flume是分布式的,可靠的,高可用的,用于对不同来源的大量的日志数据进行有效收集.聚集和移动,并以集中式的数据存储的系统. flume目前是apache的一个顶级项目. flum ...

  4. python入门必备知识总结

    人生苦短,我用python.看图说话 一.python简介与发展: python 是一种面向对象的解释性计算机程序设计语言. python由荷兰人Guido van Rossum 于1989年发明. ...

  5. mssql-sqlserver入门必备知识收集

    一.了解SQL 数据库的应用场景 sql 简介 二. 检索数据 SELECT语句    检索单个.多及所有列的方法分享 检索不同的值   限制结果   sqlserver注释编写方法 三.排序检索数据 ...

  6. Python基础入门必备知识

    1 标识符标识符是编程时使用的名字,用于给变量.函数.语句块等命名,Python 中标识符由字母.数字.下划线组成,不能以数字开头,区分大小写. 以下划线开头的标识符有特殊含义,单下划线开头的标识符, ...

  7. c语言编程基础入门必备知识

    数据类型 基本数据类型 类型名称说明char字符类型存放字符的ASCII码int整型存放有符号整数short短整型存放有符号整数long长整型存放有符号整数long long存放有符号整数float单 ...

  8. 零基础学习C语言入门必备知识

    今天跟大家一起从零学C语言: 1. C语言简介 1.1 C语言发展史 C语言是一种广泛使用的面向过程的计算机程序设计语言,既适合于系统程序设计,又适合于应用程序设计.C语言的发展历程大致如图1-1所示 ...

  9. Grid – 入门必备!简单易懂的响应式设计指南

    如今,人们使用各种各样的移动设备访问网页,设计师们需要去适配不同的屏幕,让用户在都能有最佳的浏览体验.Grid 是一个简单的响应式设计指南,按照这些简单的步骤,你的就能够掌握基础的响应网页设计技巧. ...

  10. 【入门必备】最佳的 Node.js 学习教程和资料书籍

    Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...

随机推荐

  1. DG:RFS[8]: No standby redo logfiles created for thread 2

    环境:两节点的RAC在线搭建DG,处理报错 现象:RFS[8]: No standby redo logfiles created for thread 2 ,thread2 没有建立redo Tue ...

  2. Mybatis-Plus如何自定义SQL注入器?

    有关Mybatis-Plus常用功能之前有做过一篇总结: MyBatisPlus常用功能总结!(附项目示例) 一.什么是SQL注入器 我们在使用Mybatis-Plus时,dao层都会去继承BaseM ...

  3. 微服务 - Redis缓存 · 数据结构 · 持久化 · 分布式 · 高并发

    本篇内容基于 Redis v7.0 的阐述:官网:https://redis.io/ 本篇计划用 Docker 容器辅助部署,所以需要了解点 Docker 知识:官网:https://www.dock ...

  4. js中数组的sort() 方法

    sort()  方法用于对数组的元素进行排序,并返回数组.默认排序顺序是根据字符串UniCode码.因为排序是按照字符串UniCode码的顺序进行排序的,所以首先应该把数组元素都转化成字符串(如有必要 ...

  5. vue移动端预览 pdf 文件

    pdf预览,在项目中是很常见的需求,在PC端web项目中,我们可以使用window.open(url)直接打开pdf进行预览,那么移动端虽然我们也可以使用此方法,但是这是新开了一个webview页面, ...

  6. 如何将 Spire.Doc for C++ 集成到 C++ 程序中

    Spire.Doc for C++是一个专业的 Word 库,供开发人员在任何类型的 C++ 应用程序中阅读.创建.编辑.比较和转换 Word 文档. 本文演示了如何以两种不同的方式将 Spire.D ...

  7. 禁用Chrome浏览器Websocket

    前言:最近遇到关于Websocket的相关测试,推荐一个禁用Chrome浏览器Websocket的扩展插件 一.下载使用 1.https://github.com/arthepsy/chrome-di ...

  8. FreeSSL申请免费证书

    FreeSSL申请免费证书 FreeSSL 是一个免费证书和 SSL 证书管理平台.旨在为个人和小型企业提供免费 SSL 证书,以加强他们的网站和应用程序的安全性.与传统的 SSL 证书颁发机构不同, ...

  9. .NET Core 波场链离线签名、广播交易(发送 TRX和USDT)笔记

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. ...

  10. Solon 框架,单月下载量超100万了!!!

    Solon 框架,于2023年的四月份突冲100万下载量了.感谢开源的力量,我们同喜同荣!!!Solon 目前,是"可信开源共同体"的新成员,积极参与中科院的"开源之夏& ...