once

震惊了!原来这才是kafka!

北城以北 提交于 2019-12-11 06:49:57
简介 kafka是一个分布式消息队列。具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。 kafka对外使用topic的概念,生产者往topic里写消息,消费者从读消息。为了做到水平扩展,一个topic实际是由多个partition组成的,遇到瓶颈时,可以通过增加partition的数量来进行横向扩容。单个parition内是保证消息有序。 每新写一条消息,kafka就是在对应的文件append写,所以性能非常高。 kafka的总体数据流是这样的: kafka data flow 大概用法就是,Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉去指定Topic的消息,然后进行业务处理。 图中有两个topic,topic 0有两个partition,topic 1有一个partition,三副本备份。可以看到consumer gourp 1中的consumer 2没有分到partition处理,这是有可能出现的,下面会讲到。 关于broker、topics、partitions的一些元信息用zk来存,监控和路由啥的也都会用到zk。 生产 基本流程是这样的: kafka sdk product flow.png 创建一条记录

storm是如何保证at least once语义的?

亡梦爱人 提交于 2019-12-11 02:10:35
storm中的一些原语: 要说明上面的问题,得先了解storm中的一些原语,比如: tuple和message tuple:在storm中,消息是通过tuple来抽象表示的,每个tuple知道它从哪里来,应往哪里去,包含了其在tuple-tree(如果是anchored的话)或者DAG中的位置,等等信息。 spout spout充当了tuple的发送源,spout通过和其它消息源,比如kafka交互,将消息封装为tuple,发送到流的下游。 bolt bolt是tuple的实际处理单元,通过从spout或者另一个bolt接收tuple,进行业务处理,将自己加入tuple-tree(通过在emit方法中设置anchors)或DAG,然后继续将tuple发送到流的下游。 acker acker是一种特殊的bolt,其接收来自spout和bolt的消息,主要功能是追踪tuple的处理情况,如果处理完成,会向tuple的源头spout发送确认消息,否则,会发送失败消息,spout收到失败的消息,根据配置和自定义的情况会进行消息的丢弃、重放处理。 spout、bolt、acker的关系: spout将tuple发送给流的下游的bolts. bolt收到tuple,处理后发送给下游的bolts. spout向acker发送请求ack的消息. bolt向acker发送请求ack的消息.

kafka 事务

老子叫甜甜 提交于 2019-12-10 18:19:57
目录 概述 幂等 事务 2PC协议: 代码示例 概述 kafka 从0.11版本开始支持 exactly-once 语义。从此,流式处理框架数据准确性语义 at-most-once、at-least-once、exactly-once 全部支持。 exactly-once 语义的支持复杂度是最高的,单纯从语义角度上可理解为 exactly-once=at-least-once+幂等 ,kafka事务的引入实现 exactly-once 语义。kafka事务对 ACID 做了非完全性的支持,不支持事务回滚,事务隔离级别针对Consumer对数据的可见性提出 LSO(last-stable offset) 概念,Broker端对同一个txnid的事务做串行处理。本文从 Consumer、Producer、Broker 三个角色分析kafka事务。(全文基于2.3版本) 幂等 kafka中幂等这个概念是针对 Proudcer--->Broker 写场景讲的,基于 at-least-once 语义一条消息Broker只能成功存储一次。kafka引入了 pid+sequence number 实现了 topic-partition 局性幂等性。pid全局唯一,使用curator框架由zk生成(curator生成全局ID方案), sequence number 由Producer累加生成

【YOLO-V1】You Only Look Once: Unified, Real-Time Object Detection

天涯浪子 提交于 2019-12-10 09:34:38
You Only Look Once: Unified, Real-Time Object Detection 您只看一次:统一的实时对象检测 前言 近几年来,目标检测算法取得了很大的突破。比较流行的算法可以分为两类,一类是基于Region Proposal的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN),他们是two-stage的,需要先使用启发式方法(selective search)或者CNN网络(RPN)产生Region Proposal,然后再在Region proposal上做分类与回归。而另一类是Yolo,SSD这类one-stage算法,其仅仅使用一个CNN网络直接预测不同目标的类别与位置。第一类方法是准确率高一些,但是速度慢,但是第二类算法是速度快,但是准确率要低一些。这里我们谈的是Yolo-v1版本算法,其性能是差于后来的SSD算法的,但是Yolo后来也继续进行改进,产生了Yolo9000算法。本文主要讲述Yolo-v1算法的原理,特别是算法的训练与预测中详细细节,最后将给出如何使用TensorFlow实现Yolo算法。 滑动窗口与CNN 在介绍Yolo算法之前,首先先介绍一下滑动窗口技术,这对我们理解Yolo算法是有帮助的。采用滑动窗口的目标检测算法思路非常简单,它将检测问题转化为了图像分类问题

WordPress 执行过程

风格不统一 提交于 2019-12-06 15:50:27
我在本地新建的一个WordPress,已经进行过配置,确定可以访问,整个目录结构是这样的 WordPress的整个过程 访问一个wordpress 最先应该进入到index.php define('WP_USE_THEMES', true); require('./wp-blog-header.php'); 第一行定义WP_USR_THEMES常量的值为true 第二行包含并运行文件wp-blog-header.php wp-blog-header.php的内容 if ( !isset($wp_did_header) ) { $wp_did_header = true; require_once( dirname(__FILE__) . '/wp-load.php' ); wp(); require_once( ABSPATH . WPINC . '/template-loader.php' ); } 检测$wp_did_header是否设置,由于是首次执行,没有设置,进入if语句。定义$wp_did_header变量,然后包含并运行当前目录下的wp-load.php文件。 __FILE__取得当前文件的路径和文件名 dirname()函数取得当前路径 wp-load.php是设置 ABSPATH 常量和加载 wp-config.php 文件的引导文件 wp-config.php

2.kafka架构深入——生产者

戏子无情 提交于 2019-12-06 15:23:08
一个topic有多个partition,每个partition又有多个副本,在这些副本中又有一个leader和多个follower。 1)分区的原因 (1)方便在集群中扩展,每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了; (2)可以提高并发,因为可以以Partition为单位读写了。 2)分区的原则 我们需要将producer发送的数据封装成一个ProducerRecord对象。 (1)指明 partition 的情况下,直接将指明的值直接作为 partiton 值; (2)没有指明 partition 值但有 key 的情况下,将 key 的 hash 值与 topic 的 partition 数进行取余得到 partition 值; (3)既没有 partition 值又没有 key 值的情况下,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition 值,也就是常说的 round-robin 算法。 生产者发送到topic的数据可靠性保证 为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后

c++中#ifndef ... 与#pragma once的区别

妖精的绣舞 提交于 2019-12-05 08:31:20
原文链接: https://www.cnblogs.com/qiang-upc/p/11407364.html (1)C/C++防止头文件被include多次的方法:#ifnde.. 及 #pragma once (2)二者都是宏实现 (3)#ifndef 不仅可以保证同一个文件不会被包含多次,而且可以保证文件内容完全相同的两个文件被同时包含,不受编译器的控制。 但是,如果宏名 不小心冲突,则会出现编译器找不到 文件的问题, 同时,在大型的项目中,#ifndef需要打开头文件进行重复定义的检查,编译时间较长。 (4)#pragma once 由编译器保证,物理上相同的同一文件(并不指内容上相同)不会被include多次。#pragma once只针对文件,并不针对一段代码。 缺点:如果多个头文件发生拷贝,并不保证不被包含,不支持跨平台。 来源: https://www.cnblogs.com/fourmi/p/11915288.html

You Only Look Once Unified, Real-Time Object Detection(你只需要看一次统一的,实时的目标检测)

萝らか妹 提交于 2019-12-05 07:00:33
我们提出了一种新的目标检测方法YOLO。先前的目标检测工作重新利用分类器来执行检测。相反,我们将目标检测作为一个回归问题来处理空间分离的边界框和相关的类概率。单个神经网络在一次评估中直接从完整图像预测包围盒和类概率。由于整个检测管道是一个单一的网络,因此可以直接对检测性能进行端到端的优化。 我们的统一架构速度非常快。我们的基本YOLO模型以每秒45帧的速度实时处理图像。另一个更小版本的网络Fast YOLO每秒处理155帧,同时仍然可以实现其他实时检测器的两倍。与最先进的检测系统相比,YOLO定位误差更大,但在背景下预测误报的可能性较小。最后,YOLO学习对象的一般表示。当从自然图像推广到其他领域(如艺术作品)时,它优于其他检测方法,包括DPM和R-CNN。 来源: https://www.cnblogs.com/2008nmj/p/11912332.html

Runtime Method Swizzling开发实例汇总

陌路散爱 提交于 2019-12-05 03:59:31
前言:什么是Method Swizzling,在iOS开发中它有什么作用? 简单来说我们主要是使用Method Swizzling来把系统的方法交换为我们自己的方法,从而给系统方法添加一些我们想要的功能。该篇文章主要列举Method Swizzling在开发中的一些现实用例,同时文中也有补充读者的一些疑点。 希望阅读文章的朋友们也可以提供一些文中尚未举出的例子,本文持续更新中。 目前已更新实例汇总: 实例一:替换ViewController生命周期方法 实例二:解决获取索引、添加、删除元素越界崩溃问题 实例三:防止按钮重复暴力点击 实例四:全局更换控件初始效果 实例五:App热修复 实例六:App异常加载占位图通用类封装 实例七:全局修改导航栏后退(返回)按钮 Method Swizzling通用方法封装 在列举之前,我们可以将Method Swizzling功能封装为类方法,作为NSObject的类别,这样我们后续调用也会方便些。 #import <Foundation/Foundation.h> #import <objc/runtime.h> @interface NSObject (Swizzling) + (void)methodSwizzlingWithOriginalSelector:(SEL)originalSelector bySwizzledSelector:

Kafka设计解析(八)- Kafka事务机制与Exactly Once语义实现原理

 ̄綄美尐妖づ 提交于 2019-12-05 02:14:05
写在前面的话 本文所有Kafka原理性的描述除特殊说明外均基于Kafka 1.0.0版本。 为什么要提供事务机制 Kafka事务机制的实现主要是为了支持 Exactly Once 即正好一次语义 操作的原子性 有状态操作的可恢复性 Exactly Once 《 Kafka背景及架构介绍 》一文中有说明Kafka在0.11.0.0之前的版本中只支持 At Least Once 和 At Most Once 语义,尚不支持 Exactly Once 语义。 但是在很多要求严格的场景下,如使用Kafka处理交易数据, Exactly Once 语义是必须的。我们可以通过让下游系统具有幂等性来配合Kafka的 At Least Once 语义来间接实现 Exactly Once 。但是: 该方案要求下游系统支持幂等操作,限制了Kafka的适用场景 实现门槛相对较高,需要用户对Kafka的工作机制非常了解 对于Kafka Stream而言,Kafka本身即是自己的下游系统,但Kafka在0.11.0.0版本之前不具有幂等发送能力 因此,Kafka本身对 Exactly Once 语义的支持就非常必要。 操作原子性 操作的原子性是指,多个操作要么全部成功要么全部失败,不存在部分成功部分失败的可能。 实现原子性操作的意义在于: 操作结果更可控,有助于提升数据一致性 便于故障恢复。因为操作是原子的