Kakfa揭秘 Day4 Kafka中分区深度解析
Kakfa揭秘 Day4
Kafka中分区深度解析
今天主要谈Kafka中的分区数和consumer中的并行度。从使用Kafka的角度说,这些都是至关重要的。
分区原则
Partition代表一个topic的分区,可以看到在构造时注册了zookeeper,也就是说kafka在分区时,是被zk管理的。
在实际存储数据时,怎么确定分区。
咱们从kafka的设计开始,为了完成高吞吐性,关键有两点设计:
- 使用了磁盘操作系统级的页page的访问,据说在顺序读写时比使用内存速度更快。
- 使用Topic进行分布化,可以突破一台机器的限制。consumer和producer都是基于Topic的多线程操作,其中每个线程都会操作一个分区。
也就是分区是高吞吐的一个关键。从具体实现看,每次来请求的时候,都会用一条新的线程来处理,每次consumer或者producer,背后都有一个socketServer,提供NIO操作。
那是不是说Kafka只要topic越多,上面的partition越多,吞吐就越大么?凡事都有利弊,这里有几点考虑。
- 当分区变多时,服务器需要开辟更多的线程,有更多的内存消耗和CPU的使用,太多的时候,会产生太多的句柄,那么管理方面消耗就会过大。
- kafka本身在运行时,每个producer在写数据时,都有一个cache,达到量之后,会把具体的消息发送给kafka集群,分区越多的情况下,从producer角度,cache就越大,内存消耗越多。
- kafka cluster有很多的组件,在分区数较多时会进行大量的管理,会产生大量的句柄。
- ReplicaManager 都要管理每个parition,需要保存相关的句柄,并进行leader、follower与zk交互,在选举过程中会有短暂的不可用,当分区过多时,让zk选举的工作也会特别庞大。
所以,从工作角度,是需要设定一个合适的分区数,这个是需要根据实际数据情况进行训练的。
分区过程
下面让我们具体跟踪一下分区的过程。
Producer
首先从发送数据开始:
数据本身一般有key,则直接获取指定,否则是使用partitioner进行随机选取。
随机计算时会根据Hash值进行计算。
Consumer
默认会用一条线程来消费数据,默认是一个分区一个线程,一个线程可以消费很多分区的数据。
在实现时,会有一个queue阻塞队列,如果没有消息的话,会阻塞的一直等消息过来。读取数据时会有一个策略,决定了每个consumer中的线程读取哪些分区。
欲知后事如何,且听下回分解!
DT大数据每天晚上20:00YY频道现场授课频道68917580
Kakfa揭秘 Day4 Kafka中分区深度解析的更多相关文章
- Kakfa揭秘 Day3 Kafka源码概述
Kakfa揭秘 Day3 Kafka源码概述 今天开始进入Kafka的源码,本次学习基于最新的0.10.0版本进行.由于之前在学习Spark过程中积累了很多的经验和思想,这些在kafka上是通用的. ...
- Kakfa揭秘 Day1 Kafka原理内幕
Spark Streaming揭秘 Day32 Kafka原理内幕 今天开始,会有几天的时间,和大家研究下Kafka.在大数据处理体系中,kafka的重要性不亚于SparkStreaming.可以认为 ...
- Kakfa揭秘 Day2 Kafka内核再揭秘
Spark Streaming揭秘 Day33 Kafka内核再揭秘 优秀的框架会把引擎做到极致,Kafka就是这样,让我们再深入一下研究. 设计目标 kafka系统有着比较独特的的设计,包括5点: ...
- Kafka学习之一深度解析
背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能 高吞吐 ...
- Hadoop中Partition深度解析
本文地址:http://www.cnblogs.com/archimedes/p/hadoop-partitioner.html,转载请注明源地址. 旧版 API 的 Partitioner 解析 P ...
- Kafka源码深度解析-序列7 -Consumer -coordinator协议与heartbeat实现原理
转自:http://blog.csdn.net/chunlongyu/article/details/52791874 单线程的consumer 在前面我们讲过,KafkaProducer是线程安全的 ...
- 「Kafka」Kafka中offset偏移量提交
在消费Kafka中分区的数据时,我们需要跟踪哪些消息是读取过的.哪些是没有读取过的.这是读取消息不丢失的关键所在. Kafka是通过offset顺序读取事件的.如果一个消费者退出,再重启的时候,它知道 ...
- Kafka深度解析(如何在producer中指定partition)(转)
原文链接:Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能 ...
- Kafka深度解析
本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...
随机推荐
- 装在u盘的linux
有个8g的优盘,想利用下装linux,好久没碰Linux了,puppy Linux中文版已经不更新了,Ubuntu麒麟按部就班的跟着Ubuntu官方版的更新走,不过发现一个软件,满不错的,Ubuntu ...
- BootStrap2学习日记8---表单
<form> <label for="username">用户名</label> <input id="username&quo ...
- IIS7程序发布后 之 报图表处理程序配置 [c:\TempImageFiles\] 中的临时目录无效
把.net4.0的ASP.NET网站布置在IIS7上,原本开发时一切ok,图形都能够出来,但是一旦部署到iis上,再访问的话, 错误问题:图表处理程序配置 [c:\TempImageFiles\] 中 ...
- LeetCode 11
Container With Most Water Given n non-negative integers a1, a2, ..., an, where each represents a poi ...
- 使用GBK编码请求访问nodejs程序报415错误:Error: unsupported charset at urlencodedParser ...
最近遇到一个问题,第三方用户向我们提供给的回调地址发送请求时一直报415错误,结果发现他们使用的是GBK编码请求,而我们使用的node + express4 程序,不支持GBK编码请求. 问题出在下面 ...
- Tomcat - 持久化 Session
Session 是保存在内存中的,如果服务器重启.宕机的话,Session 就会丢失.有时候,我们需要对 Session 持久化以应对意外的情况发生.例如,客户端与服务器在交互过程中,可能因为 Ses ...
- CF下的BackgroudWorker组件优化.
.net compact framwork(2.0/3.5)下没有Backgroundworder组件,在网上找了一个类 经过使用发现了一些问题,主要有一个问题:在一个Dowork事件中对Report ...
- oracle是数据库的学习第一节:数据库的安装
一.本地oracle服务器 1.安装oracle服务器,可以到oracle官方网站上下载与自己电脑匹配的服务器,一般用10g,或者11g; 2.打开cmd,打开sql*plus,之后可以写SQL语句了 ...
- 第五篇、Uber用视频播放做启动动画
import UIKit import AVFoundation class GuidePage: FxBasePage { @IBOutlet var backImageView:UIImageVi ...
- ios 多线程-GCD-NSOperation
一.线程间的通讯 1.使用NSObject类的方法performSelectorInBackground:withObject:来创建一个线程. 具体的代码:隐式创建,自动启动 [Object per ...