`
文章列表
这篇文章是 Kafka Exactly-Once 实现系列的第二篇,主要讲述 Kafka 事务性的实现,这部分的实现要比幂等性的实现复杂一些,幂等性实现是事务性实现的基础,幂等性提供了单会话单 Partition Exactly-Once 语义的实现,正是因为 Idempotent Producer 不提供跨多个 Partition 和跨会话场景下的保证,因此,我们是需要一种更强的事务保证,能够原子处理多个 Partition 的写入操作,数据要么全部写入成功,要么全部失败,不期望出现中间状态。这就是 Kafka Transactions 希望解决的问题,简单来说就是能够实现 atomic w ...
Apache Kafka 从 0.11.0 开始,支持了一个非常大的 feature,就是对事务性的支持,在 Kafka 中关于事务性,是有三种层面上的含义:一是幂等性的支持;二是事务性的支持;三是 Kafka Streams 的 exactly once 的实现,关于 Kafka 事务性系列的文章我们只重点关注前两种层面上的事务性,与 Kafka Streams 相关的内容暂时不做讨论。社区从开始讨论事务性,前后持续近半年时间,相关的设计文档有六十几页(参考 Exactly Once Delivery and Transactional Messaging in Kafka)。事务性这部分的 ...
前言 Kafka 作为一个高吞吐量的消息队列,它的很多设计都体现了这一点。比如它的客户端,无论是 Producer 还是 Consumer ,都会内置一个缓存用来存储消息。这样类似于我们写文件时,并不会一次只写一个字节,而是先写到一个缓存里,然后等缓存满了,才会将缓存里的数据写入到磁盘。这种缓存机制可以有效的提高吞吐量,本篇文章介绍缓存在 Kafka 客户端的实现原理。 Producer 缓存 我们知道 Producer 发送消息,会先将它存到 RecordAccumulator 的缓存里,等待缓存满了之后,就会发送到服务端。这个缓存的大小,是由内部的内存池控制的。 内存池使用 我们 ...
  1.  Kerberos简介 1.1. 功能 一个安全认证协议 用tickets验证 避免本地保存密码和在互联网上传输密码 包含一个可信任的第三方 使用对称加密 客户端与服务器(非KDC)之间能够相互验证
1. 为什么要建开放平台 从05年开始随着web2.0技术的快速发展,硅谷掀起了开放平台openapi的一股热潮,google开放了map api,还有很多互联网公司也推出了开放平台,但是真正引起人们注意的是twitter开放了社交api,一堆基于twitter开 ...

TIME_WAIT和CLOSE_WAIT

    博客分类:
  • tcp
我相信很多都遇到过这个问题。一旦有用户在喊:网络变慢了。第一件事情就是,netstat -a | grep TIME_WAIT | wc -l 一下。哎呀妈呀,几千个TIME_WAIT.   然后,做的第一件事情就是:打开Google或者Bing,输入关键词:too many time wait。一定能找到解决方案,而排在最前面或者被很多人到处转载的解决方案一定是:
在本系列的上一篇文章中对 Java 平台提供的 Lambda 表达式和流做了介绍。受限于 Java 标准库的通用性要求和二进制文件大小,Java 标准库对函数式编程的 API 支持相对比较有限。函数的声明只提供了 Function 和 BiFunction 两种,流上所支持的操作的数量也较少。为了更好地进行函数式编程,我们需要第三方库的支持。Vavr 是 Java 平台上函数式编程库中的佼佼者。 Vavr 这个名字对很多开发人员可能比较陌生。它的前身 Javaslang 可能更为大家所熟悉。Vavr 作为一个标准的 Java 库,使用起来很简单。只需要添加对 io.vavr:vavr 库的 ...
从1990年数据仓库之父比尔·恩门(Bill Inmon)提出数据仓库的概念,ETL作为数据仓库的核心组件,在传统的数据仓库中是服务于数据采集,数据处理,大数据时代来临,对ETL的理解也由【抽取、转换、加载】升级到【交换】这个层面。如果你也考虑建设企业级数据仓库可以作为参考。 0x0 ETL之定位 业内多数知名数据仓库解决方案提供方利用公司的自我研发的ETL工具及数据平台从生产系统接入数据源,在库内进行数据转换工作,与其他三方厂家(乙方)一样,自顾一亩三分地,完成了端对端的数据支撑,然而对于甲方而言,各个厂家的端的数据采集无疑是对生产系统的增加多倍压力,另外厂家之间的数据交换也是常 ...
前言 Java 1.7 引入了一种新的并发框架—— Fork/Join Framework。 本文的主要目的是介绍 ForkJoinPool 的适用场景,实现原理,以及示例代码。 TLDR; 如果觉得文章太长的话,以下就是结论: ForkJoinPool 不是为了替代 ExecutorService,而是它的补充,在某些应用场景下性能比 ExecutorService 更好。(见 Java Tip: When to use ForkJoinPool vs ExecutorService ) ForkJoinPool 主要用于实现“分而治之”的算法,特别是分治之后递归调用的函数 ...
Java 8中的Stream与Lambda表达式结合在一起,确实使得开发中的很多常见任务变得更简单。通过级联多个不同的操作符,如map、filter和reduce等,可以在一行代码里面完成很多的任务。那种一行代码搞定一切的愉悦感,着实让人很满意。今天我们来说说Stream中不那么愉悦的部分 - 异常处理。 如果你看一眼Stream中包含的所有方法,你会发现,这些方法都没有声明抛出任何checked异常。再看一眼接口
Kafka Streams 初识流式处理 什么是数据流 数据流(也叫事件流)是无边界数据集的抽象表示。无边界意味着无限和持续增长。无边界数据集之所以是无限的,是因为随着时间的推移,新记录会不断加入进来。数据流除了无边界还有以下特性: 数据流是有序的。事件的发生总是有先后顺序的,如先下单再发货
分布式一致性 在一个分布式系统中,如何保证集群中所有节点中的数据完全相同并且能够对某个提案(Proposal)达成一致是分布式系统正常工作的核心问题,而共识算法就是用来保证分布式系统一致性的方法。 然而分布式系 ...
分布式协议,是分布式中的难点,很多程序员都难以理解什么是协议?作用是什么?为何要如此实现?以及其中的算法精髓,今天我们通过中国男篮的例子,来讲一讲,分布式协议中的Gossip协议。首先,我们应该理解分布式协议是做什么的,分布式,意味着多机部署,那么,不同机器之间是如何进行通信的呢?我们将不同机器之间的交流称之为协议,主要用来分布式环境下不同机器之间的通信,保证集群下不同机器间的数据交流与数据一致性      Gossip协议,是一个比较简单的分布式协议,它的小名又叫留言传播,被广泛应用到各个系统当中,Redis官方多机部署方案中,亲儿子RedisCluster用的正是Gossip协议。 ...
写了个cache服务器的抽象层,如果cache中不存在该对象,我就让它返回null。 public Person fetch(String name){ //do some thing.can not find the Person. return null; }   头说这么不对,专家建议方法尽量不返回null,让我设置一个常量代替null,这叫 Null Object模式,于是又改成下面这样: public Person fetch(String name){ //can not find the Person ...
RRDTool 是一套监测工具,可用于存储和展示被监测对象随时间的变化情况。比如,我们在 Windows 电脑上常见的内存和 CPU 使用情况:   电脑内存和  CPU 使用情况 RRD 全称是 Round Robin Database ,即「环型数据库」。顾名思义,它是一种循环使用存储空间的数据库,适用于存储和时间序列相关的数据。 RRD 数据库在被创建的时候就已经定义好了大小,当空间存储满了以后,又从头开始覆盖旧的数据,所以和其他线性增长的数据库不同,RRD 的大小可控且不用维护。 你可以把 RRD 理解为一个有时间刻度的圆环,每个刻度上可以存储一个 ...
Global site tag (gtag.js) - Google Analytics