once

Kafka实现原理阅读笔记

五迷三道 提交于 2020-01-01 14:26:22
设计理念 持久化 尽量线性的读写磁盘。一个硬盘的顺序读写速度一般是4k读写的千倍以上。线性的读写是可以被预测,也能被操作系统大幅的优化的。 以pagecache为中心的设计风格,使用文件系统并依赖于pagecache要优于维护内存中缓存或其他结构。一方面避免 JVM 中的 gc带来的性能损耗。同时简化了代码实现。 持久化队列,只需要简单的在文件后面追加写入即可。而不用考虑建立一个索引文件(BTree)。查询和写入的复杂度由 BTree的 O(logN) 减小为线性的 O(1)。大幅提升数据的吞吐量,有利于处理海量数据,且对存储系统的性能要求不高,降低成本。 考虑将多条消息聚合在一次。减少平均每条消息的开销。 使用 zero-copy 减少字符拷贝时候的开销。 开启压缩协议,减少数据所占的空间。 生产者 (Producer) Producer 向 Leader Partition 发送消息。 Producer 可以向任何一个 Partition 询问整个集群的状态,以及谁是 Leader Partition Producer 自己决定写入到哪个 Partition。Producer 可以考虑使用何种负载的策略。随机,轮询,按照key分区都可以。 支持批量操作。消息攒够一定数量再发送,使用适当的延迟换来更高的数据吞吐量。 消费者 (Consumer) 消费者直接向 Leader

VC++ 自动锁

ⅰ亾dé卋堺 提交于 2019-12-27 04:04:26
头文件声明(CAutoLock.h): #ifndef AUTO_LOCKER_HEAD_FILE #define AUTO_LOCKER_HEAD_FILE #pragma once //数据锁定 class CAutoLocker { //变量定义 private: INT m_nLockRef; //锁定计数 CCriticalSection & m_CriticalSection; //锁定对象 //函数定义 public: //构造函数 CAutoLocker(CCriticalSection & CriticalSection); //析构函数 virtual ~CAutoLocker(); //操作函数 public: //锁定函数 VOID Lock(); //解锁函数 VOID UnLock(); //状态函数 public: //锁定次数 inline INT GetLockRef() { return m_nLockRef; } }; #endif 源码实现(CAutoLock.cpp): #include "StdAfx.h" #include "CAutoLocker.h" //构造函数 CAutoLocker::CAutoLocker(CCriticalSection & CriticalSection) : m_CriticalSection

kafka exactly-once

£可爱£侵袭症+ 提交于 2019-12-26 23:17:05
2018年,Apache Kafka以一种特殊的设计和方法实现了强语义的exactly-once和事务性。 这篇文章将讲解kafka中exactly-once和事务操作的原理,具体为 (1)exactly-once在kafka中的定义。 (2)数据生产者“幂等操作”,kafka的事务性以及exactly-once实现原理。 (3)exactly-once的流处理。 1. 什么是恰好一次exactly-once exactly-once定义为: 不管在处理的时候是否有错误发生,计算的结果(包括所有所改变的状态)都一样。 所以,在计算的时候如果发生了一个错误,系统重新计算,重新计算的结果和没有错误发生所得到的结果是一样的,因为这些计算操作是“恰好一次的”。这有另外一个专业术语:“幂等操作”。 为什么exactly-once那么重要呢?(1)在流处理操作中,很多应用场景必须需要“恰好一次”的支持。比如生活着有一个很重要的使用场景:在转账给朋友的时候,用户只希望一次转账,如果不支持“恰好一次”,那么就无法保障在违背用户本意的情况下重复转账。(2)对于kafka而言,其是流处理平台的核心部件,因为kafka通常作为公司内部的消息系统中间件,是其他系统的消息传输的桥梁。(3)支持exactly-once操作可以解锁更过的应用,比如金融行业应用。 使用Kafka进行流处理通常主要包含三个步骤

Once for all, the way to solve the problem Google Chrome Software Reporter Tool 长时间占用CPU

那年仲夏 提交于 2019-12-25 10:35:33
First , What's Software Reporter Tool ??? Software Reporter Tool:是一个Chrome清理工具,用于清理谷歌浏览器中不必要或恶意的扩展,应用程序,劫持开始页面等等。当你安装Chrome时,Software_reporter_tool.exe也就会被下载在SwReporter文件夹下的Chrome应用数据文件夹中。 这个软件在运行的过程中可能会长时间地占用CPU,导致高CPU使用率。 So, How to uninstall SRT ??? 虽然可以通过任务管理器手动结束进程或者选择删除SRT,但这都不是长久的解决办法。 因为过一段时间它又会再次运行,且SRT在浏览器更新的时候就又会重新被下载下来。 So , How to solve this trouble ??? 直捣黄龙,默认程序路径: C:\Users\[YourName]\AppData\Local\Google\Chrome\User Data\SwReporter\[版本]\software_reporter_tool.exe 快捷方式:win+r 键 并且 输入命令快速定位:%localappdata%\Google\Chrome\User Data\SwReporter HighLight: 1.右键单击software_reporter_tool

#pragma once与 #ifndef的区别

我们两清 提交于 2019-12-23 07:42:09
#pragma once与 #ifndef的区别 转自: http://www.cppblog.com/szhoftuncun/archive/2011/12/29/35356.html 为了避免同一个文件被include多次 1 #ifndef方式 2 #pragma once方式 在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #endif 方式二: #pragma once ... ... // 一些声明语句 #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况 #pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题

C++中多线程与Singleton的那些事儿

独自空忆成欢 提交于 2019-12-21 23:50:39
前言 前段时间在网上看到了个的面试题,大概意思是如何在不使用锁和C++11的情况下,用C++实现线程安全的Singleton。 看到这个题目后,第一个想法就是用Scott Meyer在《Effective C++》中提到的,在static成员函数中构造local static变量的方法来实现,但是经过一番查找、思考,才明白这种实现在某些情况下是有问题的。本文主要将从最基本的单线程中的Singleton开始,慢慢讲述多线程与Singleton的那些事。 单线程 在单线程下,下面这个是常见的写法: template<typename T> class Singleton { public: static T& getInstance() { if (!value_) { value_ = new T(); } return *value_; } private: Singleton(); ~Singleton(); static T* value_; }; template<typename T> T* Singleton<T>::value_ = NULL; 在单线程中,这样的写法是可以正确使用的,但是在多线程中就不行了。 多线程加锁 在多线程的环境中,上面单线程的写法就会产生race condition从而产生多次初始化的情况。要想在多线程下工作

#pragma once 与 #ifndef 解析

送分小仙女□ 提交于 2019-12-18 07:54:57
为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上, 二者并没有太大的区别,但是两者仍然还是有一些细微的区别 。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 声明、定义语句 #endif 方式二: #pragma once ... ... // 声明、定义语句 #ifndef的方式受C/C++语言标准支持。它 不 光可以保证同一个 文件 不会被包含多次,也能保证内容完全相同的两个文件( 或者代码片段 )不会被不小心同时包含 。 当然, 缺点就是如果不同头文件中的宏名不小心“撞车” ,可能就会导致你看到头文件明明存在,编译器却硬说找不到声明的状况——这种情况有时非常让人抓狂。 由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,ifndef会使得编译时间相对较长,因此一些编译器逐渐开始支持#pragma once的方式。 #pragma once一般由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。 你无法对一个头文件中的一段代码作pragma once声明,而只能针对文件 。 其 好处是

php 文件包含 include、include_once、require、require_once

佐手、 提交于 2019-12-17 12:31:17
简言之,include某文件:把某文件的代码粘过来,如果该文件不存在,也继续执行下面的代码,带_once的是看看之前引用过没,引用过就不引用了(_once这行代码的心里活动:“之后引用过没有我不关心,我只看我之前引用过没”)。require和include的区别仅仅在报错的处理上,require某文件时,文件不存在则报错 include、include_once、require、require_once include某文件:把某文件的代码粘过来,替换掉include某文件这个语句,如果该文件不存在,也继续执行下面的代码 require某文件:和include不同的地方是,如果文件不存在,报错 带_once的是,朝前看,如果之前引入过该文件,那么就不引入了!带_once的效率低点。 详情如下: --------------------------------------- include某文件,就等于把该文件中代码粘贴过来,替换掉include这句话 这样一来,看看多次include一个文件会是什么效果 a1.php代码改为如下; <?php //我是a1.php $a1++; ?> index.php 代码如下: 1 <?php 2 ini_set("error_reporting","E_ALL & ~E_NOTICE"); 3 header("Content-type

JS让函数只调用一次

耗尽温柔 提交于 2019-12-13 14:26:00
1 。 在第一次调用函数时,就将该函数内容腾空,以到达函数仅调用一次 ———————————————————————————————— 2 。 设置布尔值来控制后面的函数调用 window.onload = function () { var flag = true; function once() { if (flag) { alert("我被调用"); flag = false; } else { return; } } once(); once(); } 来源: https://www.cnblogs.com/mlw1814011067/p/12034750.html

kafka一致性语义保证

让人想犯罪 __ 提交于 2019-12-11 16:30:25
一、消息传递语义:三种,至少一次,至多一次,精确一次 1、at lest once:消息不丢,但可能重复 2、at most once:消息会丢,但不会重复 3、Exactly Once:消息不丢,也不重复。 二、数据一致性保证:保证消息不丢、消息不重复 消息不丢:副本机制+ack,可以保证消息不丢。 数据重复:brocker保存了消息之后,在发送ack之前宕机了,producer认为消息没有发送成功进行重试,导致数据重复。 数据乱序:前一条消息发送失败,后一条消息发送成功,前一条又重试,成功了,导致数据乱序。 三、消息一致性保证:主要就是保证Exactly Once,即:数据不丢、数据不重复 1、0.11之前的kafka版本:保证消息丢,要在消息发送端和消费端都要进行保证。 (1) 来源: https://www.cnblogs.com/guoyu1/p/12023264.html