Kakfa揭秘 Day4

Kafka中分区深度解析

今天主要谈Kafka中的分区数和consumer中的并行度。从使用Kafka的角度说,这些都是至关重要的。

分区原则

Partition代表一个topic的分区,可以看到在构造时注册了zookeeper,也就是说kafka在分区时,是被zk管理的。

在实际存储数据时,怎么确定分区。
咱们从kafka的设计开始,为了完成高吞吐性,关键有两点设计:

  1. 使用了磁盘操作系统级的页page的访问,据说在顺序读写时比使用内存速度更快。
  2. 使用Topic进行分布化,可以突破一台机器的限制。consumer和producer都是基于Topic的多线程操作,其中每个线程都会操作一个分区。

也就是分区是高吞吐的一个关键。从具体实现看,每次来请求的时候,都会用一条新的线程来处理,每次consumer或者producer,背后都有一个socketServer,提供NIO操作。

那是不是说Kafka只要topic越多,上面的partition越多,吞吐就越大么?凡事都有利弊,这里有几点考虑。

  1. 当分区变多时,服务器需要开辟更多的线程,有更多的内存消耗和CPU的使用,太多的时候,会产生太多的句柄,那么管理方面消耗就会过大。
  2. kafka本身在运行时,每个producer在写数据时,都有一个cache,达到量之后,会把具体的消息发送给kafka集群,分区越多的情况下,从producer角度,cache就越大,内存消耗越多。
  3. kafka cluster有很多的组件,在分区数较多时会进行大量的管理,会产生大量的句柄。
  4. ReplicaManager 都要管理每个parition,需要保存相关的句柄,并进行leader、follower与zk交互,在选举过程中会有短暂的不可用,当分区过多时,让zk选举的工作也会特别庞大。

所以,从工作角度,是需要设定一个合适的分区数,这个是需要根据实际数据情况进行训练的。

分区过程

下面让我们具体跟踪一下分区的过程。

Producer

首先从发送数据开始:

数据本身一般有key,则直接获取指定,否则是使用partitioner进行随机选取。

随机计算时会根据Hash值进行计算。

Consumer

默认会用一条线程来消费数据,默认是一个分区一个线程,一个线程可以消费很多分区的数据。
在实现时,会有一个queue阻塞队列,如果没有消息的话,会阻塞的一直等消息过来。读取数据时会有一个策略,决定了每个consumer中的线程读取哪些分区。

欲知后事如何,且听下回分解!

DT大数据每天晚上20:00YY频道现场授课频道68917580

Kakfa揭秘 Day4 Kafka中分区深度解析的更多相关文章

  1. Kakfa揭秘 Day3 Kafka源码概述

    Kakfa揭秘 Day3 Kafka源码概述 今天开始进入Kafka的源码,本次学习基于最新的0.10.0版本进行.由于之前在学习Spark过程中积累了很多的经验和思想,这些在kafka上是通用的. ...

  2. Kakfa揭秘 Day1 Kafka原理内幕

    Spark Streaming揭秘 Day32 Kafka原理内幕 今天开始,会有几天的时间,和大家研究下Kafka.在大数据处理体系中,kafka的重要性不亚于SparkStreaming.可以认为 ...

  3. Kakfa揭秘 Day2 Kafka内核再揭秘

    Spark Streaming揭秘 Day33 Kafka内核再揭秘 优秀的框架会把引擎做到极致,Kafka就是这样,让我们再深入一下研究. 设计目标 kafka系统有着比较独特的的设计,包括5点: ...

  4. Kafka学习之一深度解析

    背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能 高吞吐 ...

  5. Hadoop中Partition深度解析

    本文地址:http://www.cnblogs.com/archimedes/p/hadoop-partitioner.html,转载请注明源地址. 旧版 API 的 Partitioner 解析 P ...

  6. Kafka源码深度解析-序列7 -Consumer -coordinator协议与heartbeat实现原理

    转自:http://blog.csdn.net/chunlongyu/article/details/52791874 单线程的consumer 在前面我们讲过,KafkaProducer是线程安全的 ...

  7. 「Kafka」Kafka中offset偏移量提交

    在消费Kafka中分区的数据时,我们需要跟踪哪些消息是读取过的.哪些是没有读取过的.这是读取消息不丢失的关键所在. Kafka是通过offset顺序读取事件的.如果一个消费者退出,再重启的时候,它知道 ...

  8. Kafka深度解析(如何在producer中指定partition)(转)

    原文链接:Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能 ...

  9. Kafka深度解析

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...

随机推荐

  1. CentOS下通过locale来设置字符集

    转载:http://www.centoscn.com/CentOS/config/2013/1013/1784.html 在Centos中通过locale来设置程序运行的不同语言环境,locale由A ...

  2. BootStrap2学习日记11---单选框多选框

    单选框代码: <label for="country">国家</label> <select id="country"> & ...

  3. c# TCP/IP编程

    这东西很多朋友都有写过了,我也就写着玩玩,就当做个笔记吧.不废话了. TCP/IP在数据通信中被广泛的使用,自然得包含客户端和服务端,当然,自己自言自语不是什么不可以,可那样貌似有点神经. 好了,那就 ...

  4. ESX虚拟机文件列表详解

    http://jackiechen.blog.51cto.com/196075/210492 关闭状态时的文件列表: *-flat.vmdk:虚拟机的原始磁盘文件,包含整个虚拟机镜像.   *.nvr ...

  5. 前端必会html知识整理

    1.浏览器内核:         1.ie:trident(三叉戟)内核         2.firefox:gecko(壁虎)内核         3.safari:webkit(浏览器核心)内核 ...

  6. iOS之内购

    很久之前就想出一篇IOS内付费的教程,但是一查网上的教程实在太多了,有的写得真的蛮不错的,就心想算了,于是就保存在草稿箱了.至于为什么写完它呢!真是说来话长,最近公司有个项目经理跑来问我有关苹果内付费 ...

  7. Mysql 死锁相关操作

    该随笔随时记录日常工作中遇到的关于mysql的死锁相关问题 1)查看mysql当前的处理线程(connection) mysql> show processlist; 2)杀掉对应的connec ...

  8. 【线性结构上的动态规划】UVa 11584 - Partitioning by Palindromes

    回文串问题.给出一个字符串,问最少可以划分为多少个字符串子串. 对于判断是否为回文串,对于不是很长的字符串,可以采取直接暴力,即从两边向中间收缩判断字符相等. bool is_pali(int l, ...

  9. WP8.1 RSA 加解密实例(导入公钥私钥)

    因项目上需要用到,之前在WP8.0的环境上调试通过,现在在开发8.1时发现已不支持原来的加密库,所以无法使用以前的方法,不得已,去寻找windows命名空间下RSA的加解密方法,经过几天的尝试,将解决 ...

  10. Newtonsoft.Json.dll序列化为json,null值自动过滤

    var jSetting = new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}; var json = ...