自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(18)
  • 资源 (1)
  • 问答 (3)
  • 收藏
  • 关注

原创 Java时间知多少

java 中的时间在很长的一段时间里,Java 的日期时间解决方案一直是一个备受争议的设计,它的问题很多,有的是概念容易让人混淆(比如:Date 和 Calendar 什么情况下该用哪个),有的是接口设计的不直观(比如:Date 的 setMonth 参数是从 0 到 11),有的是实现容易造成问题(比如:前面提到的 SimpleDateFormat 需要考虑多线程并发的问题,需要每次构建一个新的对象出来)。这种乱象存在了很长时间,有很多人都在尝试解决这个问题(比如 Joda Time)。从 Java

2021-03-25 21:40:05 64177 2

原创 kafka系列之重试机制(15)

kafka 重试机制重试源码首先我们从KafkaProducer的send 方法入手我们看到其实客户端是不会直接发送数据的,而是将其加入到了一个缓存里面去,然后根据缓存的情况(result)判断要不要发送,发送也只是唤醒sender 对象RecordAccumulator.RecordAppendResult result = accumulator.append(tp, timestamp, serializedKey, serializedValue, headers, inter

2021-03-17 11:10:22 65128 4

原创 kafka系列之Coordinator(14)

Coordinator与消费者在数据库设计过程中,我们经常会有这样的情况下某个基础表会被多个视图或者存储过程引用修改基础表的时候,我们必须小心翼翼地,因为不会有任何提示告诉我们,如果继续修改,会不会造成视图或者存储过程有问题即便我们知道有问题,我们也没有办法去让视图和存储过程刷新得到表最新的信息如果你在创建视图中使用了select *,就会导致各种各样的bug"协调者"有些陌生,所谓协调者,在 Kafka 中对应的术语是 Coordinator,它专门为 Consumer Group

2021-03-16 20:43:50 65889 2

原创 kafka系列之Controller(13)

Controller控制器组件(Controller)是 Apache Kafka 的核心组件。它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群,例如分区领导者副本的选举。集群中任意一台 Broker 都能充当控制器的角色,但是,在运行过程中,只能有一个 Broker 成为控制器,行使其管理和协调的职责。换句话说,每个正常运转的 Kafka 集群,在任意时刻都有且只有一个控制器。对ZK的依赖Kafka 控制器大量使用 Watch 功能实现对集群的协调管理

2021-03-16 20:42:47 65686

原创 kafka系列之事务生产者(12)

事务生产者前面我们学习了幂等生产者,知道了幂等生产者存在的两个局限不支持跨回话和多分区以及它的优点就是使用简单,针对这两个不足我们看一下kafka 的另外一个解决方案——事务Kafka 自 0.11 版本开始也提供了对事务的支持,目前主要是在 read committed 隔离级别上做事情。它能保证多条消息原子性地写入到目标分区,同时也能保证 Consumer 只能看到事务成功提交的消息。事务型 Producer 能够保证将消息原子性地写入到多个分区中。这批消息要么全部写入成功,要么全部失败。事

2021-03-14 10:08:56 65523 1

原创 kafka系列之幂等生产者(11)

幂等生产者幂等”这个词原是数学领域中的概念,指的是某些操作或函数能够被执行多次,但每次得到的结果都是不变的在命令式编程语言(比如 C)中,若一个子程序是幂等的,那它必然不能修改系统状态。这样不管运行这个子程序多少次,与该子程序关联的那部分系统状态保持不变。在函数式编程语言(比如 Scala 或 Haskell)中,很多纯函数(pure function)天然就是幂等的,它们不执行任何的 side effect。幂等性有很多好处,其最大的优势在于我们可以安全地重试任何幂等性操作,反正它们也不会破坏我

2021-03-13 13:01:10 65290

原创 kafka系列之Consumer 消费模式(10)

消费模式Standalone Consumer(独立消费者)和消费者组相同的是,它们也要配置 group.id 参数值,但和消费者组调用 KafkaConsumer.subscribe() 不同的是,独立消费者调用 KafkaConsumer.assign() 方法直接消费指定分区。使用assign的consumer就是standalone consumer,一旦给消费者分配分区之后,就可以和consumer group 一样,在循环中调用‘poll’ 方法获取数据独立消费者就是没有使用消费者组机

2021-03-12 18:46:53 67117 1

原创 kafka系列之Consumer 拦截器(9)

Consumer 拦截器前面我们详细介绍了拦截器的原理,可以参考kafka系列之Producer 拦截器(06),其实拦截器的在很多技术中都有,关于拦截器的应用场景我们在前面一节中也介绍过了,这一节我们直接看一下消费者端拦截器的使用。我觉得为了学习kafka ,你可以打开kafka 的源码包,看看都有什么,你可以从kafka-client 包开始我们今天要介绍的ConsumerInterceptor 就是在consumer 包下面,我么前面介绍的很多东西你都可以在这里看到响应的代码,例如分区的分配策略

2021-03-11 17:41:02 65811 4

原创 kafka系列之offset管理那些事(8)

位移 offset每个消费者在消费消息的过程中必然需要有个字段记录它当前消费到了分区的哪个位置上,这个字段就是消费者位移(Consumer Offset),它是消费者消费进度的指示器。看上去Offset 就是一个数值而已,其实对于 Consumer Group 而言,它是一组 KV 对,Key 是分区,V 对应 Consumer 消费该分区的最新位移 TopicPartition->long不过切记的是消费者位移是下一条消息的位移,而不是目前最新消费消息的位移。提交位移主要是为了表征 Con

2021-03-11 11:38:48 65761

原创 kafka系列之消费者与分区(7)

消费者与分区消费者组我们知道 kafka 支持两种消息模型 队列模型和发布订阅模型(publish-subscribe)队列的处理方式是一组消费者从服务器读取消息,一条消息只由其中的一个消费者来处理发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。消费者组Kafka为这两种模型提供了单一的消费者抽象模型: 消费者组 (consumer group)。 消费者用一个消费者组名标记自己。 一个发布在Topic上消息被分发给此消费者组中的一个消费者。 假如所有的消费者

2021-03-11 11:38:00 66533

原创 select * 的八宗罪

select * 的八宗罪背景(盛传于互联网的说法)你经常可以在网上看到总有一些人会给你说不要使用select 而是使用具体的列名代替,而且他们也给出了你一部分理由,现在我们也来扒扒这个select 到底为什么不建议用!第一宗 不必要的IO这会导致 DBMS 读取所有的数据pages,但是这些数据你又不用,在后来的SQL中又可能被过滤掉了或者是直接没用,但是读取数据是需要成本的,尤其大字段例如 blob ,text 。select colunm_a,column_b(select * f

2021-03-10 21:26:02 65215

原创 kafka系列之Producer 拦截器(6)

Producer 拦截器拦截器(interceptor)是个相当新的功能,它是在Kafka 0.10版本被引入的,主要用于实现clients端的定制化控制逻辑。拦截器作为一个非常小众的功能,Kafka 拦截器自 0.10 版本被引入后并未得到太多的实际应用。Kafka 拦截器可以应用于包括客户端监控、端到端系统性能检测、消息审计等多种功能在内的场景,对于监控我们其实是利用拦截器实现了埋点类似的功能Spring 中的拦截器如果你用过 Spring Interceptor 或是 Apache Flum

2021-03-10 11:52:08 65060

原创 kafka系列之数据不丢失的重要保证—ACK(5)

ACK机制ACK 是acknowledge 的缩写,意思就是确认,这里的指的是producer 需要接受到来自Broker 的ack 信息,其实更准确的说法是接收到来自Leader partition 的ack 信息 ,需要注意的是ACK机制的开启,会直接影响Kafka集群的吞吐量和消息可靠性,而吞吐量和可靠性就像硬币的两面,两者不可兼得,只能平衡,所以要根据自己的业务特点进行取舍。ACK 是kafka 保证数据数据不丢失的重要手段。但是可能导致数据重复,当然这取决于你的配置。在开始之前我们先了解另外

2021-03-10 08:52:47 65611

原创 kafka系列之kafka分区与备份(4)

分区 Partition分区的意义提高负载均衡的能力kafak 通过分区来提高系统的负载均衡能力,主要通过以下两个方面进行保证的Kafka 创建Topic 的时候使得分区均匀的分布在各个Broker(集群节点)上kafka 在生产者发送消息到kafka 集群的时候,通过一定的负载均衡策略,使得数据均匀的分布在各个分区上这样通过在两个层面上的保证,从而保证了集群整体的负载均衡实现系统的高伸缩性(Scalability)不同的分布式系统对分区的叫法也不尽相同。比如在 Kafka 中叫分区,在

2021-03-09 18:46:29 66045

原创 kafka系列之kafka生产者与分区(3)

概要当我们发送消息之前,先问几个问题:每条消息都是很关键且不能容忍丢失么?偶尔重复消息可以么?我们关注的是消息延迟还是写入消息的吞吐量?举个例子,有一个信用卡交易处理系统,当交易发生时会发送一条消息到Kafka,另一个服务来读取消息并根据规则引擎来检查交易是否通过,将结果通过Kafka返回,对于这样的业务,消息既不能丢失也不能重复,由于交易量大因此吞吐量需要尽可能大,延迟可以稍微高一点。再举个例子,假如我们需要收集用户在网页上的点击数据,对于这样的场景,少量消息丢失或者重复是可以容忍的,延迟多大都

2021-03-09 17:52:06 65000

原创 kafka系列之Kafka基础架构(2)

Kafka基础架构在上一节我们也说过一些名词概念什么的,这一节我们就详细看一下这些概念都是什么,怎样去理解。Topic (主题)主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。这里的逻辑容器可以看做是消息的类别,我们将同一类的消息放在一个Topic你可以通过kafka 提供的命令来查看当前kafka 集群都有哪些分区Partition(分区)Partition 是 Kafka 中比较特色的部分,一个 Topic 可以分为多个 Partition,每个 Partition

2021-03-08 17:21:53 63887 2

原创 kafka系列之kafka入门概论(1)

概论什么是消息中间件举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了

2021-03-07 16:30:28 63446

原创 Hadoop系列之资源调度 Yarn 重启策略和高可用 (35)

重启ResourceManager是管理资源和调度在YARN上运行的应用程序的中央机构。因此,它在整个Apache YARN群集中有潜在单点故障风险。本文档概述了ResourceManager重新启动,此功能可以增强ResourceManager使其在重新启动后仍能正常运行,并且还可以使用户感知不到ResourceManager的重启。ResourceManager 支持两种重启策略不保留工作的RM重新启动,此重新启动增强了RM,以将应用程序/尝试程序 状态和其他凭据信息保留在可插拔状态存储中。 RM将

2021-03-06 13:17:28 63787 1

数据仓库理论与实战(适用于从事数仓方向的小伙伴)

数据仓库理论与实战(适用于从事数仓方向的小伙伴)

2022-02-15

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除