偏移量

kafka学习(八)

匿名 (未验证) 提交于 2019-12-03 00:39:02
                管理kafka 主题操作 1.在集群里创建一个主题需要用到3个参数。这些参数是必须提供的,尽管有些已经有broker级别的默认值。 主题名字,想要创建的主题的名字,主题名字可以包含字母,数字,下划线以及英文状态下破折号和句号。 复制系数,主题的副本数量 分区,主题的分区数量 指定主题配置 可以在创建时显式地指定复制系数或者对配置进行覆盖,通过向kafka-topic.sh 传递 --config参数来实现的。 主题创建的格式 kafka-topics.sh --zookeeper <zookeeper connect> --create --topic <string> --relipcation-fact <integer> -- partition <integer> 如果为集群指定了基于机架信息的副本分配策略,那么分区的副本会分布在不同的架构上。如果不需要基于架构信息的分配策略,可以指定参数 --disable-rack-aware 增加分区 kafak-topics.sh --zookeeper <zookeeper connect> --alter --topic <String> --partitions <integer> 只能增加分区,不能删除分区,如果删除分区,会导致数据不一致。 删除主题 如果一个主题不再使用,只要它还存在集群里面

ARM NVIC控制器(基于cortex-M4)

匿名 (未验证) 提交于 2019-12-02 23:57:01
中断控制寄存器映射 中断寄存器的基地址为0xE000E000,所有中断控制/状态寄存器都只能在特权级下访问(除软件触发中断寄存器外),寄存器映射列表见表3-2。也可以参考cortex-m4使用手册,并推荐使用CMSIS函数来访问相关功能。 表3-2 中断寄存器映射 偏移量 名称 位宽 类型 复位值 描述 0x100-0x11C ISER0-ISER7 32 R/W 0x00000000 中断使能寄存器,寄存器0为(IRQ0~IRQ31),以此类推 0x180-0x19C ICER0-ICER7 32 R/W 0x00000000 中断清除使能寄存器,寄存器0为(IRQ0~IRQ31),以此类推 0x200-0x21C ISPR0-ISPR7 32 R/W 0x00000000 中断挂起寄存器,寄存器0为(IRQ0~IRQ31),以此类推 0x280-0x29C ICPR0-ICPR7 32 R/W 0x00000000 中断挂起清除寄存器寄存器0为(IRQ0~IRQ31),以此类推 0x300-0x31C IABR0-IABR7 32 RO 0x00000000 中断活动状态寄存器寄存器0为(IRQ0~IRQ31),以此类推 0x400-0x4EF IPR0-IPR59 32 R/W 0x00000000 中断优先级寄存器0寄存器0为(IRQ0~IRQ3),以此类推 0xD08

Spark学习之路(十六)―― Spark Streaming 整合 Kafka

匿名 (未验证) 提交于 2019-12-02 23:38:02
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37809146/article/details/91283672 一、版本说明 Spark针对Kafka的不同版本,提供了两套整合方案: spark-streaming-kafka-0-8 和 spark-streaming-kafka-0-10 ,其主要区别如下: spark-streaming-kafka-0-8 spark-streaming-kafka-0-10 Kafka版本 0.8.2.1 or higher 0.10.0 or higher AP״̬ Deprecated 从Spark 2.3.0版本开始,Kafka 0.8支持已被弃用 Stable(稳定版) 语言支持 Scala, Java, Python Scala, Java Receiver DStream Yes No Direct DStream Yes Yes SSL / TLS Support No Yes Offset Commit API(偏移量提交) No Yes Dynamic Topic Subscription (动态主题订阅) No Yes 本文使用的Kafka版本为 kafka_2.12-2.2.0 ,故采用第二种方式进行整合。 二、项目依赖 项目采用Maven进行构建

InnoDB数据页结构

匿名 (未验证) 提交于 2019-12-02 21:59:42
真实数据的存储在不同的存储引擎中存放的格式一般是不同的 ,有的存储引擎比如Memory都不用磁盘来存储数据,就跟NoSQL一样,服务器关闭后数据就不见了。InnoDB是MySQL的默认储存引擎,也是我们大家常用的存储引擎。 InnoDB 储存引擎中页的结构。 InnoDB数据页结构 InnoDB 是一个将表中的数据存储到磁盘上的存储引擎,所以即使关机后重启我们的数据还是存在的。而真正处理数据的过程是发生在内存中的,所以需要把磁盘中的数据加载到内存中,如果是处理写入或修改请求的话,还需要把内存中的内容刷新到磁盘上。而我们知道读写磁盘的速度非常慢,和内存读写之间的差距就不再多说,所以当我们想从表中获取某些记录时, InnoDB 存储引擎需要一条一条的把记录从磁盘上读出来么?不,那样会慢死, InnoDB 采取的方式是:将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16 KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。 数据页 ,大小也为16KB,但是这16KB大小的存储空间被划分为多个部分,不同的部分当然有着不同的功能,结构如下: 名称 中文名 占用空间大小 简单描述 File Header 文件头 38字节 描述页的信息 Page Header 56字节 页的状态信息

系统调用IO和标准IO

匿名 (未验证) 提交于 2019-12-02 21:56:30
Ŀ¼ open close read write lseek ioctl 在Linux中一切皆文件,文件操作在Linux中是十分重要的。为此, Linux内核提供了一组用户进程与内核进行交互的接口用于对文件和设备进行访问控制,这些接口被称为系统调用。 系统调用对于应用程序最大的作用在于: 以统一的形式,为应用程序提供了一组文件访问的抽象接口,应用程序不需要关心文件的具体类型,也不用关心其内部实现细节。 常用的系统调用IO函数有5个:open、close、read、write、ioctl,此外还有个非系统调用IO函数lseek,系统调用IO都是不带缓冲的IO。 open open用于创建一个新文件或打开一个已有文件,返回一个非负的文件描述符fd。 0、1、2为系统预定义的文件描述符,分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO。 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> //成功返回文件描述符,失败返回-1 int open ( const char * pathname , int flags , ... /* mode_t mode */ ); flags参数一般在O_RDONLY、O_WRONLY和O_RDWR中选择指定一个

重读APUE(1)-lseek注意事项

左心房为你撑大大i 提交于 2019-12-02 21:13:05
lseek使用的注意事项: 1. lseek的返回值,成功返回新的文件偏移量,失败返回-1,不能用<0判断 ;因为文件偏移量可能是正的,也可能是负的,所以不能使用<0判断成功与否;注意:对于普通文件,偏移量必须是非负的;但比如Intel x86处理器上运行的FreeBSD设备/dev/kmem就支持负的偏移量; 2. lseek只是把文件偏移量存在内核中,用于下一次的读或者写,并不会引起IO操作 ;lseek系统调用实际上最后会调用内核的file_operations->llseek函数; 3. 文件偏移量可以大于文件的当前长度 ;这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞;注意,位于文件中,但是没有写过的字节都被读为0,并且这些空洞不需要占用磁盘存储区; 4. 使用追加方式打开文件后调用lseek; 可以调用lseek,read可以读取任意设置的偏移位置的数据,但是write写之前会将偏移设置到文件尾,只能从文件尾开始写文件; 来源: https://www.cnblogs.com/wanpengcoder/p/11762716.html

netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk

*爱你&永不变心* 提交于 2019-12-01 23:08:20
  PoolArena实现了用于高效分配和释放内存,并尽可能减少内存碎片的内存池,这个内存管理实现使用PageRun/PoolSubpage算法。分析代码之前,先熟悉一些重要的概念: page: 页,一个页是可分配的最小的内存块单元,页的大小:pageSize = 1 << n (n <= 12)。 chunk: 块,块是多个页的集合。chunkSize是块中所有page的pageSize之和。 Tiny: <512B的内存块。 Small: >=512B, <pageSize的内存块。 Normal: >=pageSize, <=chunkSize的内存块。 Huge: >chunkSize的内存块。   PoolArena维护了一个PoolChunkList组成的双向链表,每个PoolChunkList内部维护了一个PoolChunk双向链表。分配内存时,PoolArena通过在PoolChunkList找到一个合适的PoolChunk,然后从PoolChunk中分配一块内存。 关键属性   pageSize: page的大小。必须满足 pageSize = 1 << n (n>=12)。   maxOrder: 完全平衡二叉树的高度。   chunkSize: chunk的大小。chunkSize = pageSize * (1 << maxOrder)。   memory:

Vtable内存布局分析

浪子不回头ぞ 提交于 2019-12-01 23:06:59
vtale 内存布局分析 虚函数表指针与虚函数表布局 考虑如下的 class: class A { public: int a; virtual void f1() {} virtual void f2() {} }; int main() { A *a1 = new A(); return 0; } 首先明确,sizeof(A)的输出是 16,因为:class A 中含有一个 int 是 4 字节,然后含有虚函数,所以必须含有一个指向 vtable 的 vptr,而 vptr 是 8 字节,8 + 4 = 12,对齐到 8 的边界,也就是 16 上述 class 的 AST record layout 如下: *** Dumping AST Record Layout 0 | class A 0 | (A vtable pointer) 8 | int a | [sizeof=16, dsize=12, align=8, | nvsize=12, nvalign=8] 可以证明对齐边界为 8 字节 需要注意的是:由于含有指针,而 64 位系统,指针为 8 字节,所以对齐边界是 8 虚函数表指针 vptr 为了完成多态的功能,现代的 C++编译器都采用了表格驱动的对象模型,具体来说,所有虚函数的地址都存放在一个表格之中,而这个表格就被称为 虚函数表vtable

Kafka Consumer Lag Monitoring

随声附和 提交于 2019-12-01 16:13:26
Sematext Monitoring 是最全面的Kafka监视解决方案之一,可捕获约 200个Kafka指标 ,包括Kafka Broker,Producer和Consumer指标。 尽管其中许多指标很有用,但每个人都有一个要监视的特定指标–消费者滞后。 什么是卡夫卡消费者滞后? 卡夫卡消费者滞后指标表明卡夫卡生产者和消费者之间存在多少滞后。 人们谈论卡夫卡时,通常指的是卡夫卡经纪人。 您可以将Kafka Broker视为Kafka服务器。 代理实际上是存储和提供Kafka消息的对象。 Kafka生产者是将消息写入Kafka(经纪人)的应用程序。 Kafka使用者是从Kafka(Brokers)读取消息的应用程序。 内部经纪人数据存储在一个或多个主题中,每个主题由一个或多个分区组成。 当写入数据时,代理实际上会将其写入特定的分区。 在写入数据时,它会跟踪每个分区中的最后一个“写入位置”。 这称为最新偏移,也称为对数结束偏移。 每个分区都有自己独立的最新偏移量。 就像Broker跟踪每个分区中的写入位置一样,每个Consumer跟踪每个正在消耗其数据的分区中的“读取位置”。 也就是说,它跟踪已读取的数据。 这被称为消费者抵销。 消费者偏移量会定期存在(到ZooKeeper或Kafka本身的特殊主题),因此它可以承受消费者崩溃或不正常关机的情况,并避免重复使用过多的旧数据。

Kafka笔记

痴心易碎 提交于 2019-12-01 10:22:49
Kafka简介 Kafka 是一个高吞吐量、低延迟分布式的消息队列。kafka每秒可以处理几十万条消息, 它的延迟最低只有几毫秒。 Kafka 模型 kafka 提供了一个生产者、缓冲区、消费者的模型 Broker:kafka集群有多个服务器组成, 用于存储数据(消息) Topic: 不同的数据(消息)被分为不同的topic(主题) Producer: 消息生产者, 往broker中某个topic里生产数据 Consumer:消息的消费者, 从broker中某个topic获取数据 概念理解 Topic && Message kafka将所有消息组织成多个topic的形式存储, 而每个 topic 又可以拆分成多个partition, 每个partition又由一条条消息组成。 每条消息都被标识了一个递增序列号代表其进来的先后顺序, 并按顺序存储在parition中。 Producer 选择一个topic, 生产消息, 消息会通过分配策略将消息追加到该topic下的某个partition 分区末尾(queue) Consumer 选择一个topic, 通过 id(offset 偏移量) 指定从哪个位置开始消费消息。消费完成之后保留id, 下次可以从这个位置开始继续消费, 也可以从其他任意位置开始消费。 Offset(偏移量): 能唯一标识该分区中的每个记录。