代码编织梦想

存储策略

每个topic有多个分区组成,而每个分区由多个segmet组成,每个segment由.log文件和.index文件组成
在这里插入图片描述index文件主要保存消息的偏移量,根据消息的偏移量以及消息大小快速定位到消息的位置
当查找消息时采用二分查找

生产者

分区原因

  • 方便在集群中扩展
  • 提高并发

分区原则
producer在发送消息时把每条消息包装成一个producerRecoder对象
在这里插入图片描述数据可靠性保障
为保障leader接收到数据之后,生产者可以继续发送数据,leader接收完数据在什么时候给生产者反馈(ack)?
一种是半数以上follower同步完之后发送ack,一种是全部follower同步完发送

注:第二种在0.8之前有两种决定:同步时间和同步的消息数量,在0.8之后只有同步时间决定
在这里插入图片描述生产者的acks参数提供三种配置给用户,让用户根据数据可靠性保障选取策略
acks=0 不管leader返回ack,不断发送数据,可能丢失数据
acks=1 只要leader写完数据就返回ack,不管follower是否同步完,可能丢失数据
在这里插入图片描述

acks=-1 全部leader和follower写完数据返回ack,可能重复数据
在这里插入图片描述
ISR中数据的一致性
HW保证存储一致性和消费一致性,不保证数据丢失和数据重复(acks)
在这里插入图片描述如何保证ExactlyOnce
在这里插入图片描述

消费者

两种分区分配策略

  • RoundRobin 按照消费者组划分,把所有主题看做整体然后轮询分配分区
  • Range(默认) 按照主题划分(先看谁订阅了主题再看是否属于同一个组)

当消费者组里的消费者增加或者减少的时候会重新触发分区分配策略

消费者偏移量保存在消费者组中

  • 保存在zookeeper中,offset是由group+topic+partition决定
  • 0.9开始默认吧offset保存在kafka的一个内置主题中,该topic为_consumer_offsets。要想消费该主题需要先修改consumer.properties配置文件添加exclude.internal.topics=false
    在这里插入图片描述

kafka高校读写数据原因

  • 顺序写磁盘 600M/s比随机写磁盘100K/s块
  • 零拷贝
  • 分布式

kafka事务

  • producer事务
    引入全局transactionId绑定pid,当producer挂掉之后,重新启动可以通过transactionId找回pid,再加上at least once(producer.properties里设置acks=-1)+幂等性=exactly once可以实现精准一次性写入到kafka集群同时解决跨分区跨会话问题
  • consumer事务

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_40059536/article/details/111056877

JanusGraph Server-爱代码爱编程

JanusGraph Server JanusGraph使用Gremlin Server引擎作为服务器组件来处理和回答客户机查询。当封装在JanusGraph中时,Gremlin服务器称为JanusGraph服务器。 JanusGraph服务器必须手动启动才能使用它。JanusGraph服务器提供了一种方法,可以针对其中托管的一个或多个JanusGra

Janusgraph元数据及数据模型-爱代码爱编程

元数据及数据模型 每个JanusGraph图的元数据都由边标签、属性键及其使用的顶点标签组成。JanusGraph的元数据既可以显式定义,也可以隐式定义。建议用户在应用程序开发期间显式定义图的元数据。显式定义图的元数据是开发健壮应用程序的重要组成部分,同时提高协作软件的开发效率。注意,JanusGraph的元数据锁着时间的推移而不断的演进,而不会中断正常

上班族想快速上手Python,我建议你这样学!-爱代码爱编程

Python具有非常强大的数据处理功能,这让很多白领为之心动,因为当前大部分人都是用Excel,但Excel有很多局限性,不过大部分人是有心想学习Python,却不只从何下手,没有一个清晰的学习路线。所以,本文小编将从实践经验出发,给出一个能快速上手并少走弯路的学习路径。 对于广大上班族而言,时间和精力是首要问题,我们失去了学生时代大把的时间和试错机

Janugraph部署场景-爱代码爱编程

部署场景 JanusGraph提供了很多存储和索引后端选择,这使得它的部署方式具有很大的灵活性。本章介绍一些可能的部署场景。 在讨论不同的部署场景之前,我们先了解下JanusGraph本身和后端索引以及其后端存储的不同角色。首先,应用程序只与JanusGraph交互,主要是通过发送Gremlin遍历请求。然后JanusGraph与将接收到的遍历在后端的

Janusgraph事务-爱代码爱编程

事务 原文连接:http://www.janusgraph.cn/#%E4%BA%8B%E5%8A%A1 几乎所有与JanusGraph的交互都与事务相关。JanusGraph事务对于多线程并发使用是安全的。例如graph.V(…)和graph.tx().commit()方法都通过ThreadLocal查找以检索或创建与调用线程关联的事务。调用者也可以

pycharm编程出现SyntaxError: Non-ASCII character ‘\xe5‘ in file错误-爱代码爱编程

这里写自定义目录标题 pycharm编程出现SyntaxError: Non-ASCII character '\xe5' in file /Users/hongyuanwu/PycharmProjects/pythonProject1/test1.py on line 7, but no encoding declared; see http:/

悄悄掌握 Kafka 常用命令,再也不用全网搜索了(建议收藏)-爱代码爱编程

点击上方蓝色“大数据实战演练”,选择“设为星标”或“置顶” 回复“资源”领取独家整理的学习资料! 每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。 放弃不难,但坚持很酷~ 前言 对于从事大数据相关职位的朋友们来说,使用 kafka 的频率应该不会少。为了解决各位在操作 kafka 时记不住命令参数的痛点,所以我整理了

消息队列简史-爱代码爱编程

1983年,Teknekron。 孟买26岁的工程师Vivek Ranadive设想一种软件总线,同年Teknekron诞生了。1985年,The Information Bus(TIB)。 用于高盛,用于解决金融交易。于是发布订阅模式(PubSub)诞生了,同时还诞生了世界上第一个现代消息队列软件:Teknekron的The Information Bu

Kafka 慌了!这个中间件,要火了?-爱代码爱编程

你知道吗?在消息中间件的编年史上,RocketMQ可谓独当一面。作为Apache 顶级项目(TLP),Apache RocketMQ 是国内首个非 Hadoop 生态体系的顶级项目,开源至今被全球广泛应用,堪称阿里技术中的一颗“掌上明珠”。 阿里高并发架构,为什么用RocketMQ? Kafka主要定位日志传输,特性很难全面满足淘宝的交易、订单、

从小白的角度讲解kafka并使用java、python_API-爱代码爱编程

目录 1. 什么是kafka 1.1 基本概述 1.2 深度讲解 2. kafka的安全机制 3. python_API 3.1 作为生产者连接kafka并发送数据 1. 什么是kafka 1.1 基本概述 提前说明,以下主要涉及kafka、topic、partition、broker、offset、replica、leader、foll

kafka原理解析之-整体架构-爱代码爱编程

kafka整体架构 先上一个整体架构图,如下图。 图一:集群整体架构,P代表partition的leader, r代表partition的follower 对各个组件说明如下: Broker: Kafka服务器节点就是被称为Broker,Broker主要负责创建并存储Topic,存储Producer所发布的消息,记录消息处理的过程,现是将消息保存到

kafka原理解析之-高性能内幕-爱代码爱编程

一、日志持久化设计 1. partition的持久化队列结构:数据按先后顺序依次追加在文件末尾,读写操作分开,如下图所示。 这种结构有如下优势: 所有的操作复杂度都是O(1),读操作不会阻塞写操作,读操作之间也不会互相影响。由于性能和数据大小完全分离开来——服务器现在可以充分利用大量廉价、低转速的1+TB SATA硬盘,通过顺序写的方式追加数据。