随笔分类 - Kafka
1
Apache Kafka
摘要:Kafka添加了事务机制以后,consumer端有个需要解决的问题就是怎么样从收到的消息中滤掉aborted的消息。Kafka通过broker和consumer端的协作,利用一系列优化手段极大地降低了这部分工作的开销。 问题 首先来看一下这部分工作的难点在哪。 对于isolation.level为r
阅读全文
摘要:对于0.10.1以上版本的kafka, 如何从外部重置一个运行中的consumer group的进度呢?比如有一个控制台,可以主动重置任意消费组的消费进度重置到12小时之前, 而用户的程序可以保持运行状态,无需下线或重启。 需要这么几个步骤: 1. 加入这个group 2. 踢掉所有其它group
阅读全文
摘要:org.apache.kafka.common.client.Selector实现了Selectable接口,用于提供符合Kafka网络通讯特点的异步的、非阻塞的、面向多个连接的网络I/O. 这些网络IO包括了连接的创建、断开,请求的发送和接收,以及一些网络相关的metrics统计等功能。 所以,它
阅读全文
摘要:Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams。当时Kafka Streams还没有正式发布,所以具体的API和功能和0.10.0.0版(2016年6月发布
阅读全文
摘要:(依据于0.10.0.0版本) 这个接口的唯一实现类就是NetworkClient,它被用于实现Kafka的consumer和producer. 这个接口实际上抽象出来了Kafka client与网络交互的方式。 为了对它的API有清楚的认识,先要了解下Kafka protocol所要求的clien
阅读全文
摘要:注:0.9版本Kafka的一个重大改变就是consumer和producer API的重新设计。 这篇Kafka的文档大致介绍了对于consumer API重新设计时想要实现的功能。0.9版本的确实现了这些功能,具体细节有几篇文档讲了,以后会翻译。 Motivation We've received
阅读全文
摘要:Commit Log Kafka储存消息的文件被它叫做log,按照Kafka文档的说法是: Each partition is an ordered, immutable sequence of messages that is continually appended to—a commit lo
阅读全文
摘要:purgatory的超时检测当一个DelayedOpeartion超时(timeout)时,它需要被检测出来,然后调用它的回调方法。这个事情看起来很简单,但做好也并不容易。0.8.x的Kafka的实现简单明了,但是效率不高。这些版本的Kafka的delayed request实现了java.util...
阅读全文
摘要:Purgatory是Kafka server中处理请求时使用的一个重要的数据结构。正好研究ReplicaManager源码的时候发现了这篇文章,顺便翻译下。由于这个proposal里的很多东西需要看源码才能理解得比较清楚,但是代码还是比较多的,所以先大概讲一下其中的一些概念和原理,以便于阅读接下来的...
阅读全文
摘要:purgatory就是炼狱的意思。当一个DelayedOperation需要被delay时,它就被放到DelayedOperationPurgatory,相当于进行一个等待池。上一篇blog提到过,DelayedOperation想要摆脱delay状态,需要由事件来触发对它状态的检查,或者是超时时间...
阅读全文
摘要:DelayedOperation包括两种:DelayedFetch和DelayedProduce,它们的存在是由Kafka Protocol决定的,而Kafka Protocol是由实际需求决定的…… 存在DelayedFetch是为了更有效率的fetch,也就是batch fetch;存在Dela
阅读全文
摘要:基于Kafka 0.9.0版ReplicaManager需要做什么Replicated LogsKafka的partition可以看成是一个replicated log, 每个replica就是这个replicated log其中的一个log。多个replica是为了容忍机器故障,因此同一个part...
阅读全文
摘要:KafkaSpout的核心逻辑都是由PartitionManager来实现的。但是这个类实现时候需要考虑的东西有些多,0.92至0.93,至当前(2015.3.14)的master一直在变化。在这里,先分析一下最近的发布版0.93里的逻辑。也提出一些问题,希望以后Apache Storm会把这个类实...
阅读全文
摘要:基于0.93版本Storm首先,如果自己写KafkaSpout,该怎么办?有哪些地方需要考虑呢1.得实现Storm指定的接口。这样Storm才能够使用它。那么需要实现什么接口?需要提供什么功能给Storm调用呢?2. 需要给spout的每个task指定任务,也就是把Kafka里的消息分配给spout...
阅读全文
摘要:public KafkaSpout(SpoutConfig spoutConf) { _spoutConfig = spoutConf;}基于0.93版本的StormSpoutConfig继承自KafkaConfig。由于SpoutConfig和KafkaConfig所有的instan...
阅读全文
摘要:这个虚类是kafka.network.Acceptor和kafka.network.Processor的父类,提供了一个抽象的Sever线程。它的有趣之处在于为子类的启动和停止提供了线程间的协作机制。当子类的shutdown方法被调用时,子类可以得知自己被停止,在子类做了适当的处理和清理后,调用自己...
阅读全文
摘要:这个类实现了一些工具性质的方法,正如其名。记下自己觉得有意思的方法:readFileAsString(path: String, charset: Charset = Charset.defaultCharset()): String /** * Attempt to read a file ...
阅读全文
摘要:这算是CountDownLatch的一个典型使用场景。kafka.Kafka对象的main方法中与此有关的代码为 // attach shutdown handler to catch control-c Runtime.getRuntime().addShutdownHook(...
阅读全文
摘要:上次留下来的问题如果消息是发给很多不同的topic的, async producer如何在按batch发送的同时区分topic的它是如何用key来做partition的?是如何实现对消息成批量的压缩的?async producer如何在按batch发送的同时区分topic的 这个问题的答案是: D...
阅读全文
摘要:问题很多条消息是怎么打包在一起的?如果消息是发给很多不同的topic的, async producer如何在按batch发送的同时区分topic的它是如何用key来做partition的?是如何实现对消息成批量的压缩的?async producer是将producer.type设为async时启用的...
阅读全文
1