kafka
zy_think123
写代码让我学会了思考,而思考又教会了我写代码。我不保证我写的每个地方都是对的,但是至少可以保证我是思考过的。我的努力加上你的,解个bug总没有问题吧!
展开
-
为什么零拷贝可以提升Kafka性能?
从操作系统说起计算机系统是由“硬件”和“软件”两大部分组成,计算机硬件包括一个或多个处理器(CPU)、内存、键盘、显示器、磁盘、I/O接口以及其他一些外围设备比如打印机,绘图仪等等。总之,计算机硬件部分是一个由多种电子和机械设备组成的硬件系统。为了让人方便正确使用这些设备,就需要编写若干程序来管理这些设备,正是这些程序组成了计算机的软件系统。软件也可以分为两大类:系统软件和应用软件。人们首先直接在硬件上加载一层程序,用它来管理整个计算机硬件设备以及一些软件信息资源,同时还为用户提供开发应用程序的环境,原创 2020-05-20 10:09:20 · 164 阅读 · 0 评论 -
从Kafka到NIO
在谈NIO之前,简单回顾下内核态和用户态内核空间是Linux内核运行的空间,而用户空间是用户程序的运行空间,为了保证内核安全,它们之间是隔离的,即使用户的程序崩溃了,内核也不受影响。内核空间可以执行任意命令,调用系统的一切资源,用户空间只能执行简单运算,不能直接调用系统资源(I/O,进程资源,内存分配,外设,计时器,网络通信等),必须通过系统接口(又称 system call),才能向内核发出指令。用户进程通过系统调用访问系统资源的时候,需要切换到内核态,而这对应一些特殊的堆栈和内存环境,必须在系统原创 2020-05-14 16:18:02 · 247 阅读 · 0 评论 -
Kafka Consumer源码分析之分区策略
consumer提供三种不同的分区策略,可以通过partition.assignment.strategy参数进行配置,默认使用的策略是org.apache.kafka.clients.consumer.RangeAssignor,还存在org.apache.kafka.clients.consumer.RoundRobinAssignor和org.apache.kafka.clients.consumer.StickyAssignor这两种,它们的关系图如下所示。当我们想要自定义partition分配原创 2020-05-13 09:34:01 · 285 阅读 · 0 评论 -
Kafka consumer的offset的提交方式
Kafka consumer的offset提交机制有以下两种手动提交同步提交consumer.commitSync()方式提交异步提交consumer.commitAsync(callback)方式提交###自动提交props.put("enable.auto.commit", "true");props.put("auto.commit.interval.ms", "1000");通过上面启动自动提交以及设置自动提交间隔时间(默认为5s)源码分析同步提交源码分析同步提交的核心代原创 2020-05-12 10:28:28 · 1656 阅读 · 0 评论 -
Kafka Consumer源码之Offset及Fetcher分析
上一篇讲了consumer如何加入consumer group的,现在加入组成功之后,就要准备开始消费,但是我们需要知道consumer从offset为多少的位置开始消费。consumer中关于如何消费有2种策略:1. 手动指定调用consumer.seek(TopicPartition, offset),然后开始poll2. 自动指定poll之前给集群发送请求,让集群告知客户端,当前该TopicPartition的offset是多少,这也是我们此次分析的重点.在讲如何拉取offset之前,先认原创 2020-05-11 10:53:08 · 1027 阅读 · 0 评论 -
Kafka Producer网络层源码分析
上一篇讲了Kafka Producer发送消息的主体流程,这一篇我们关注下Kafka的网络层是如何实现的。对于发送消息而言,Producer是客户端,Broker是服务器端。Kafka使用了JavaNIO向服务器发送消息,所以在这之前需要了解java nio的基本知识。这次网络层源码分析从metadata request切入。开局一张图上面是Kafka producer网络层的主体流程,...原创 2020-04-28 11:33:43 · 294 阅读 · 0 评论 -
优雅的使用Kafka Consumer
如何消费数据我们已经知道了如何发送数据到Kafka,既然有数据发送,那么肯定就有数据消费,消费者也是Kafka整个体系中不可缺少的一环public class KafkaConsumerDemo {public static void main(String[] args) throws InterruptedException { Properties props = new Pr...原创 2020-04-10 09:55:23 · 313 阅读 · 0 评论 -
Kafka Producer消息收发设计
前几篇文章分析了Kafka的发送流程以及NIO的使用方式,但是还是留下了不少坑,这里就对剩下的问题做一个总结。收到的数据为什么要缓存起来?Kafka中Selector读取从远端回来的数据的时候会先把收到的数据缓存起来private void attemptRead(SelectionKey key, KafkaChannel channel) throws IOException { /...原创 2020-04-08 10:04:04 · 203 阅读 · 0 评论 -
我花了一周读了Kafka Producer的源码
talk is easy,show me the code,先来看一段创建producer的代码public class KafkaProducerDemo { public static void main(String[] args) { KafkaProducer<String,String> producer = createProducer(); ...原创 2020-04-07 10:15:46 · 741 阅读 · 2 评论 -
你好,Kafka
大家好,我是 kafka, 可能很多人都听说过我,知道我是 2011 年出生在 LinkedIn 的, 从那会儿到现在我的功能越发强大了。作为一个优秀而又完整的平台,你可以在我上面冗余地存储巨大的数据量,我有一个具有高吞吐量 (数百万 / 秒) 的消息总线,你可以在这上面对经过我的数据进行实时流处理。如果你认为我就只有上面的这些特点的话,那么你真的是太肤浅了。上面虽然说的很好,但是并未触及到我...原创 2020-04-03 15:37:56 · 202 阅读 · 0 评论 -
Kafka consumer是如何加入consumer group的?
consumer比producer要复杂许多,producer没有组的概念,也不需要关注offset,而consumer不一样,它有组织(consumer group),有纪律(offset)。这些对consumer的要求就会很高,这篇文章就先从consumer如何加入consumer group说起。GroupCoordinator是运行在服务器上的一个服务,负责consumer以及offse...原创 2020-03-12 09:43:52 · 789 阅读 · 0 评论