partition

34_kafka三

∥☆過路亽.° 提交于 2020-01-25 05:32:12
1. kafka内核原理 1.1 ISR机制 问题:仅依靠 多副本机制 能保证Kafka的 高可用性 ,但是能 保证数据不丢失 吗? 不行,因为如果leader宕机,但是leader的数据还没同步到follower上去,此时即使选举了follower作为新的leader,当时刚才的数据已经丢失了。 ISR是:in-sync replica,就是跟leader partition保持同步的follower partition的数量,只有处于ISR列表中的follower才可以在leader宕机之后被选举为新的leader,因为在这个ISR列表里代表他的数据跟leader是同步的。 如果要保证写入kafka的数据不丢失,首先需要保证ISR中 至少有一个follower ,其次就是在一条数据写入了leader partition之后,要求必须复制给ISR中所有的follower partition,才能说代表这条数据已提交,绝对不会丢失,这是Kafka给出的承诺 1.2 HW&LEO原理 1.2.1相关概念 LEO (last end offset,日志末端偏移量) 标识当前日志文件中下一条待写入的消息的offset。 举一个例子,若LEO=10,那么表示在该副本日志上已经保存了10条消息,位移范围是[0,9]。 HW ( Highwatermark,俗称高水位)

Kafka 0.8 配置参数解析

拜拜、爱过 提交于 2020-01-25 00:52:02
http://kafka.apache.org/documentation.html#configuration Broker Configs 4个必填参数, broker.id Each broker is uniquely identified by a non-negative integer id broker唯一标识,broker可以在不同的host或port,但必须保证id唯一 log.dirs (/tmp/kafka-logs) 日志文件存放的目录 可以用逗号隔开多个目录,当创建partitions时,会自动挑一个已创建partition最少的目录创建 因为Kafka必须充分利用磁盘资源,所以要让partititons均匀分布在所有disks上,至少每个disk创建一个目录 port (6667) broker server所在端口 zookeeper.connect zk的地址,hostname1:port1,hostname2:port2 可选的重要参数, advertised.host.name (null) 设置暴露给其他Consumer,producer,broker的域名 不设置会暴露默认域名,域名解析比较麻烦,这里可以设为ip message.max.bytes (1000000) broker可以接收的message的最大size

Kafka整体梳理

 ̄綄美尐妖づ 提交于 2020-01-24 20:19:08
整体概念图 作用是:解耦、削峰、异步处理。 brokers、topic、partition的相关信息、监控和路由相关信息使用zk存储。 zk在broker中选出一个controller,用于partition分配和leader选举。 文件存储简述 每新写一条消息,kafka就是在对应的文件append写,将随机写操作改为顺序写,所以性能非常高 使用文件系统和操作系统的页缓存分别存储和缓存消息,结合Zero-Copy,因此IO性能好 索引策略是稀疏矩阵法,查找过程采用二分法。 一个log文件对应两个索引文件,偏移量索引文件,时间戳索引文件(这个是干啥用?) 文件存储方式: 生产消息 key参数用来哈希,分配partition使用。 一般我们不传key,默认用round-robin轮询负载均衡算法来选partition。 有一个broker节点是controller,完成partition分配和leader选举。 消费消息 一个消费组里面可以有多个消费者,同一个消费组中的两个消费者,不会同时消费一个partition。 一个partition,只能被消费组里的一个消费者消费,但是可以同时被多个消费组消费。 从broker中选一个coordinator,用于分配消费那个partition。 偏移量索引流程: 解决重复消费有两个方法: 1、下游系统保证幂等性,重复消费也不会导致多条记录;

了解Kafka

荒凉一梦 提交于 2020-01-24 06:55:10
Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输 支持Kafka Server间的消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输 同时支持离线数据处理和实时数据处理 Scale out:支持在线水平扩展 Kafka架构 Kafka术语解释 Borker:Kafka集群包含一个或多个服务器,这种服务器被称为broker Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处) Partition:Parition是物理上的概念,每个Topic包含一个或多个Partition. Producer:负责发布消息到Kafka broker Consumer:消息消费者,向Kafka broker读取消息的客户端。 Consumer Group :每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name

Linux SWAP 交换分区配置说明

ε祈祈猫儿з 提交于 2020-01-24 04:50:23
一.SWAP 说明 1.1 SWAP 概述 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。 这个是SWAP 交换分区的作用。 实际上,我们更关注的应该是SWAP分区的大小问题。 设置多大才是最优的。 一般来说可以按照如下规则设置swap大小: 4G以内的物理内存,SWAP 设置为内存的2倍。 4-8G的物理内存,SWAP 等于内存大小。 8-64G 的物理内存,SWAP 设置为8G。 64-256G物理内存,SWAP 设置为16G。 实际上,系统中交换分区的大小并不取决于物理内存的量,而是取决于系统中内存的负荷,所以在安装系统时要根据具体的业务来设置SWAP的值。 1.2 系统在什么情况下才会使用SWAP? 实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由swappiness 参数值控制。 [root@rhce ~]# cat /proc/sys/vm/swappiness 60 该值默认值是60. swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,

【Spark】(七)spark partition 理解 / coalesce 与 repartition的区别

牧云@^-^@ 提交于 2020-01-24 04:24:36
文章目录 一、spark 分区 partition的理解 二、coalesce 与 repartition的区别(我们下面说的coalesce都默认shuffle参数为false的情况) 三、实例 四、总结 一、spark 分区 partition的理解 spark中是以vcore级别调度task 如果读取的是hdfs,那么有多少个block,就有多少个partition 举例来说: sparksql 要读表T, 如果表T有1w个小文件,那么就有1w个partition 这时候读取效率会较低。假设设置资源为 --executor-memory 2g --executor-cores 2 --num-executors 5 。 步骤是: 拿出1-10号10个小文件(也就是10个partition) 分别给5个executor读取(spark调度会以vcore为单位,实际就是5个executor,10个task读10个partition) 如果5个executor执行速度相同,再拿11-20号文件 依次给这5个executor读取 而实际执行速度不会完全相同,那就是哪个task先执行完,哪个task领取下一个partition读取执行,以此类推。这样往往读取文件的调度时间大于读取文件本身,而且会频繁打开关闭文件句柄,浪费较为宝贵的io资源,执行效率也大大降低。 二、coalesce 与

Kafka API操作

一曲冷凌霜 提交于 2020-01-23 21:48:25
文章目录 1.kafka生产者的api操作 2.kafka消费者的api操作 3.kafka分区的api操作 3.1随机分区 3.2hash分区 3.3轮询分区 首先导入maven依赖 < dependency > < groupId > org.apache.kafka </ groupId > < artifactId > kafka_2.11 </ artifactId > < version > 1.1.1 </ version > </ dependency > 然后将consumer.properties与producer.properties文件放在resources文件夹下,可以去自己机器拿,也可以copy下面的,目录结构如下 producer.properties # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under

12c以上的版本,对表进行在线分区(不使用在线重定义)

自作多情 提交于 2020-01-23 11:28:05
12c开始,对表进行在线分区,可以不使用在线重定义的方法。可以直接使用aleter table modify的方式进行分区。 参考文档: https://docs.oracle.com/en/database/oracle/oracle-database/12.2/vldbg/evolve-nopartition-table.html#GUID-5FDB7D59-DD05-40E4-8AB4-AF82EA0D0FE5 测试环境 RDBMS 19.6.0.0 -- 创建测试用的表 SQL> create table employees_convert as select * from hr.employees; Table created. SQL> -- 对测试的表进行转换 (在sys下不支持这样做 ) ALTER TABLE employees_convert MODIFY PARTITION BY RANGE (employee_id) INTERVAL (100) ( PARTITION P1 VALUES LESS THAN (150), PARTITION P2 VALUES LESS THAN (200) ) ONLINE UPDATE INDEXES ( IDX1_SALARY LOCAL, IDX2_EMP_ID GLOBAL PARTITION BY RANGE

Mysql表分区几种方式

China☆狼群 提交于 2020-01-23 09:27:31
自5.1开始对分区(Partition)有支持,一张表最多1024个分区 查询分区数据: SELECT * from table PARTITION(p0) = 水平分区(根据列属性按行分)= 举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。 === 水平分区的几种模式:=== * Range(范围) – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代(1980's)的数据,90年代(1990's)的数据以及任何在2000年(包括2000年)后的数据。 * Hash(哈希) – 这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区,。例如DBA可以建立一个对表主键进行分区的表。 * Key(键值) – 上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。 * List(预定义列表) – 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。 * Composite(复合模式) - 很神秘吧,哈哈,其实是以上模式的组合使用而已,就不解释了。举例:在初始化已经进行了Range范围分区的表上

SparkSQL PostgresQL Dataframe partitions

99封情书 提交于 2020-01-23 09:04:25
问题 I have a very simple setup of SparkSQL connecting to a Postgres DB and I'm trying to get a DataFrame from a table, the Dataframe with a number X of partitions (lets say 2). The code would be the following: Map<String, String> options = new HashMap<String, String>(); options.put("url", DB_URL); options.put("driver", POSTGRES_DRIVER); options.put("dbtable", "select ID, OTHER from TABLE limit 1000"); options.put("partitionColumn", "ID"); options.put("lowerBound", "100"); options.put("upperBound"