partition

Kafka概述与设计原理

孤者浪人 提交于 2019-12-20 00:48:15
kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性: 1. 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 2 .高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。 3 .支持通过kafka服务器和消费机集群来分区消息。 4 .支持Hadoop并行数据加载。 本篇属于大数据技术-> kafka 系列的开篇,本文从以下几个基础层面概述Kafka的知识点,后续在针对于单个的技术点扩展每篇博文。 Kafka背景介绍 Kafka基本架构组件 Kafka设计原理 Kafka用途 一:Kafka背景介绍 Kafka是一种高吞吐量的,分布式,快速、可扩展的,分区和可复制,基于发布/订阅模式的消息系统,由Linkedin开发,之后成为Apache项目的一部分。使用Scala语言编写,目前已被广泛应用于各行业各类型的数据管道和消息系统中。 kafka的设计目的是提供一个发布订阅解决方案,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 Kafka分布式发布订阅设计图 二 :Kafka基本架构组件 1. Broker :[中间者,代理者] Kafka集群包含多台服务器

一、KafKa概述

若如初见. 提交于 2019-12-20 00:47:40
数据技术之 Kafka 版本:V1.0 一 Kafka概述 1.1 Kafka 是什么   在流式计算中,Kafka 一般用来缓存数据,SparkStreaming/Flink/Storm 通过消费 Kafka 的数据进行计算。 1)Apache Kafka 是一个开源消息系统,由 Scala 写成。是由 Apache 软件基金会开发的 一个开源消息系统项目。 2)Kafka 最初是由 LinkedIn 开发,并于 2011 年初开源。2012 年 10 月从 Apache Incubator 毕业。该项目的目标是为了处理实时数据提供一个统一、高通量、低等待的平台 3)Kafka 是一个分布式消息队列。Kafka 对消息保存时根据 Topic 进行归类,发送消息 者称为 Producer,消息接受者称为 Consumer, 此外 kafka 集群有多个 kafka 实例组成,每个 实例(server)成为 broker。 4)无论是 kafka 集群,还是 producer 和 consumer 都依赖于 zookeeper 集群保存一些 meta 信息,来保证系统可用性。 1.2 传统消息队列实现原理   (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)     点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信 息,   

Kafka工作流程及文件存储机制

怎甘沉沦 提交于 2019-12-19 19:40:04
Kafka工作流程图解 topic Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic的。 partition topic 是逻辑上的概念,而 partition 是物理上的概念,每个 partition 对应于一个 log 文件,该 log 文件中存储的就是 producer 生产的数据。 offset Producer 生产的数据会被不断追加到该log 文件末端,且每条数据都有自己的 offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个 offset,以便出错恢复时,从上次的位置继续消费。 Kafka文件存储机制 Kafka文件存储图解 由于生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位效率低下, Kafka 采取了分片和索引机制 ,将每个 partition 分为多个 segment。每个 segment对应两个文件——“.index”文件和“.log”文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic 名称+分区序号。例如,first 这个 topic 有三个分区,则其对应的文件夹为 first-0,first-1,first-2。 00000000000000000000.index 00000000000000000000.log

MQ常问的问题

夙愿已清 提交于 2019-12-19 16:42:07
1:为什么使用MQ? 主要是:解耦、异步、削峰。 (1)解耦:A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃…A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。如果使用 MQ,A 系统产生一条数据,发送到 MQ 里面去,哪个系统需要数据自己去 MQ 里面消费。如果新系统需要数据,直接从 MQ 里消费即可;如果某个系统不需要这条数据了,就取消对 MQ 消息的消费即可。这样下来,A 系统压根儿不需要去考虑要给谁发送数据,不需要维护这个代码,也不需要考虑人家是否调用成功、失败超时等情况。 就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用 MQ 给它异步化解耦。 (2)异步:A 系统接收一个请求,需要在自己本地写库,还需要在 BCD 三个系统写库,自己本地写库要 3ms,BCD 三个系统分别写库要 300ms、450ms、200ms。最终请求总延时是 3 + 300 + 450 + 200 = 953ms,接近 1s,用户感觉搞个什么东西,慢死了慢死了。用户通过浏览器发起请求。如果使用 MQ,那么 A 系统连续发送 3 条消息到 MQ 队列中

Kafka之Consumer Rebalance

一世执手 提交于 2019-12-19 13:13:11
文章目录 Kafka版本 rebalance rebalance策略 rebalance generation rebalance协议 rebalance流程 rebalance监听器 Kafka版本 kafka版本1.1.1,可能绝大部分也适用于kafka 0.10.x及以上版本。 rebalance ConsumerGroup(消费组) 里的 Consumer(消费者) 共同读取 topic(主题) 的 partition(分区) ,一个新的 Consumer(消费者) 加入 ConsumerGroup(消费组) 时,读取的是原本由其他 Consumer(消费者) 读取的消息。当一个 Consumer(消费者) 被关闭或发生奔溃时,它就离开 ConsumerGroup(消费组) ,原本由它读取的分区将有 ConsumerGroup(消费组) 的其他 Consumer(消费者) 来读取。在 topic 发生变化时(比如添加了新的分区),会发生 Partition 重分配, Partition 的所有权从一个 Consumer(消费者) 转移到另一个 Consumer(消费者) 的行为被称为 rebalance(再均衡) 。 rebalance(再均衡) 本质上是一种协议,规定了 ConsumerGroup(消费组) 中所有 Consumer(消费者) 如何达成一致来消费

spark write to disk with N files less than N partitions

家住魔仙堡 提交于 2019-12-18 09:28:41
问题 Can we write data to say 100 files, with 10 partitions in each file? I know we can use repartition or coalesce to reduce number of partition. But I have seen some hadoop generated avro data with much more partitions than number of files. 回答1: The number of files that get written out is controlled by the parallelization of your DataFrame or RDD. So if your data is split across 10 Spark partitions you cannot write fewer than 10 files without reducing partitioning (e.g. coalesce or repartition )

SQL Error: ORA-14006: invalid partition name

允我心安 提交于 2019-12-18 03:47:16
问题 I am trying to partition an existing table in Oracle 12C R1 using below SQL statement. ALTER TABLE TABLE_NAME MODIFY PARTITION BY RANGE (DATE_COLUMN_NAME) INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) ( PARTITION part_01 VALUES LESS THAN (TO_DATE('01-SEP-2017', 'DD-MON-RRRR')) ) ONLINE; Getting error: Error report - SQL Error: ORA-14006: invalid partition name 14006. 00000 - "invalid partition name" *Cause: a partition name of the form <identifier> is expected but not present. *Action: enter an

Hive doesn't read partitioned parquet files generated by Spark

£可爱£侵袭症+ 提交于 2019-12-18 01:15:14
问题 I'm having a problem to read partitioned parquet files generated by Spark in Hive. I'm able to create the external table in hive but when I try to select a few lines, hive returns only an "OK" message with no rows. I'm able to read the partitioned parquet files correctly in Spark, so I'm assuming that they were generated correctly. I'm also able to read these files when I create an external table in hive without partitioning. Does anyone have a suggestion? My Environment is: Cluster EMR 4.1.0

VirtualBox虚拟机扩容

徘徊边缘 提交于 2019-12-17 05:50:45
1. 在VBox下增加储存 如图,未扩容前是40G 打开cmd命令行(win+r 输入cmd打开) 将目录切换到virtual的安装目录 cd C:\Program Files\Oracle\VirtualBox 然后使用VBoxManage modifyhd [虚拟机vdi文件位置] –-resize [102400] 进行扩容 如图,VBoxManage modifyhd是命令,D:\virtual\xxxx是要扩容的虚拟机vdi文件路径 102400是以M为单位,也就是更改为100G 然后运行,就扩容成功了 再去设置界面看,已经可以看到磁盘容量已经到100G了。 但是,注意啦,多出的60G还没有分配!虽然已经扩大了磁盘,但是由于还没有经过分区,指定文件系统未[格式化],所以Linux操作系统无法识别(其实就相当于你插入了一块新硬盘,但是你并没有对其进行分区、格式化是一个道理)。 2.分区 输入命令 $sudo fdisk /dev/sda 这个时候会显示 “Command (m for help): ” 让你输入命令: 输入 m 返回帮助信息如下: Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a

python3 分割函数 partition rpartition 函数

纵然是瞬间 提交于 2019-12-17 00:43:38
partition 函数,其实这个函数跟split差不多,都是字符串切割的。 举个例子: >>> a = 'changzhi1990' >>> a.rpartition('h') ('changz', 'h', 'i1990') 可以看到返回了一个三元的tuple,分别是‘h’ 的左边的字符串,分割符‘h’本身,和分割符‘h’的右边的字符串。注意:r 代表从右向左开始匹配。 >>> a = 'changzhi1990' >>> a.partition('h') ('c', 'h', 'angzhi1990') 这里是从左到右开始匹配的。 partition 从左向右寻找 ,以字符串中的某个元素为中心将左右分割共分割成三个元素并放入到元组中 rpartition 从右向左寻找 ,以字符串中的某个元素为中心将左右分割共分割成三个元素并放入到元组中 rpartition 示例如下: b = "hello is goog is world" b1 = b.rpartition("is") print(b1) 输出结果: ('hello is goog ', 'is', ' world') 来源: CSDN 作者: whatday 链接: https://blog.csdn.net/whatday/article/details/103557732