自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

atarik@163.com

高产似母猪。100% 抄袭 , 欢迎指正

原创 更换group.id时kafka从何处开始消费

设置消费者properties的两个参数 consumer.group.id properties.setProperty("auto.offset.reset", "earliest”) // latest 注意: 只要不更改group.id,每次重新消费k...

2020-05-09 20:50:58 41 0

原创 k8s之pod亲和性与反亲和性的topologyKey

Pod亲和性与反亲和性 Pod 间的亲和性与反亲和性根据已经在 Node 上运行的 Pod 的标签来调度新的 Pod 到哪个 Node 上,这些规则的形式是: 如果 X 已经运行一个或多个符合规则 Y 的 Pod,那么这个 Pod 应该(如果是反亲和性,则不应该)运行在 X 上。 和 N...

2020-05-09 20:47:23 74 0

原创 dockerfile的时区问题

k8s直接挂在/etc/localtime,发现进去容器后执行date -R和宿主机得到的结果一致, 但是jvm中获取到的时间和系统相差8小时, 日志打印同样相差8小时. 在当前基础镜像下, 没有/etc/timezone只有/etc/localtime, 通过命令ls -l /etc/local...

2020-04-24 22:27:26 32 1

原创 docker CMD和ENTRYPOINT指令

CMD 和 ENTRYPOINT 指令都是用来指定容器启动时运行的命令。 单从功能上来看,这两个命令几乎是重复的。单独使用其中的一个就可以实现绝大多数的用例 exec 模式和 shell 模式 CMD 和 ENTRYPOINT 指令都支持 exec 模式和 shell 模式的写法,所以要理解...

2020-04-19 09:44:22 37 0

原创 交互/非交互/登录/非登录 shell

一、交互shell 和 非交互shell 1、交互shell 交互式:顾名思义就是 shell 与用户存在交互, 用户登录后,在终端上输入命令,shell 立即执行用户提交的命令。 当用户退出后,shell 也终止了。 2、非交互shell 非交互式:即 shell 与用户不存在交互,而是...

2020-04-19 08:59:26 45 0

原创 sudo配置文件/etc/sudoers详解

一、sudo执行命令的流程 将当前用户切换到超级用户下,或切换到指定的用户下, 然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户。 具体工作过程如下: 当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限 -->确...

2020-04-19 08:36:26 54 0

原创 kafka服务端--SocketServer

kafka在设计上大量使用了Selector+Channel+Buffer的设计原理.所以在开始之前简单介绍一下NIO 的Selector+Channel+Buffer NIO 的Selector+Channel+Buffer Buffers(缓冲区) Java NIO中的Buffer用于和...

2020-04-10 22:07:09 10 0

原创 kafka服务端--ReplicaManager

一、ReplicaManager简介 replicaManager主要用来管理topic在本broker上的副本信息。并且读写日志的请求都是通过replicaManager进行处理的。 每个replicaManager实例都会持有一个Pool[TopicPartition, Partitio...

2020-04-10 21:51:43 13 0

原创 kafka消费端--增量拉取

前言 消费端通过poll方法拉取数据时, 每次都会调用fetch去服务端发起拉数据请求, 那每次不间断的拉取数据, broker端如何判定该次请求拉取的offset? 简介 为了减少客户端每次拉取都要拉取全部的分区,增加了增量拉取分区的概念。 拉取会话(Fetch Session),类似于...

2020-04-10 21:40:47 58 0

原创 NIO之FileChannel

kafka顺序写盘用的就是FileChannel类实现 FileChannel优势: 多线程并发读写,并发性; IO读写性能提高(OS负责),也可引做共享内存,减少IO操作,提升并发性; 应用crash,保证这部分内容还能写的进去文件。在我们调用channel.wr...

2020-04-05 17:19:56 42 3

原创 kafka服务端--LogManager

代码版本: 2.0.0-SNAPSHOT   在Kafka log的读写分析一文中有介绍过Kafka日志的结构,并提及Kafka会定期清理Segment。本文来具体看一下后台线程是如何完成清理工作,除此之外还一并涉及Kafka日志管理的其它内容,如:日志刷新,日志检查点设置等管理工作。因为功能点...

2020-04-03 21:40:42 47 0

原创 ScheduledThreadPoolExecutor类

ScheduledThreadPoolExecutor主要用来定期执行任务,或者是在给定的延迟之后运行任务。它的功能与Timer类似,但是比起Timer,ScheduledThreadPoolExecutor功能更强大,使用也更灵活。 ScheduledThreadPoolExecutor与Ti...

2020-04-03 21:32:07 22 0

原创 scala下滑线"_"的用法

第一:初始化的时候 object Sample { var name:String=_ def main (args: Array[String]){ name="hello world" println(name) } 在这里,name也可以声明为null,例:var ...

2020-04-03 21:22:36 35 0

原创 scala 样例类(case class)

case class介绍 样例类(case class)适合用于不可变的数据。它是一种特殊的类,能够被优化以用于模式匹配。 case class定义 case class Book(name: String) { def printBookName(): Unit = { pr...

2020-04-01 22:11:21 68 0

原创 kafka服务端--KafkaController(二)--副本状态机/分区状态机

状态机一般用在事件处理中,并且事件会有多种状态。当事件发生变化时,会触发对应的事件处理动作。Kafka控制启动状态机时有下面特点: 1、分区状态机和副本状态机需要获取集群中所有分区和副本,因此需要先初始化上下文后,才能启动状态机。 2、分区包含了多个副本,只有当集群中所有的副本初始化好之后,才...

2020-04-01 22:02:16 50 0

原创 kafka服务端--KafkaController(一)

一, 概述 控制器是Kafka的核心组件之一,它的主要作用是在 ZooKeeper 的帮助下协调和管理整个Kafka集群。Kafka 利用ZooKeeper 的领导者选举机制,每个Broker 都会参与竞选主控制器,但是最终只会有一个 Broker 可以成为主控制器。下面我们简单的看一下控制器主...

2020-04-01 21:41:21 56 0

原创 kafka客户端--network底层实现分析

network层的分层架构 下图展示了从最上层的KafkaProducer到最底层的Java NIO的构建层次关系: 图中淡紫色的方框表示接口或者抽象类,白色方框是具体实现。 整个架构图也体现了“面向接口编程”的思想:最底层Java NIO往上层全部以接口形式暴露,上面的3层,也都定义了相应...

2020-03-27 20:32:45 32 0

原创 kafka服务端--启动入口分析

平常我们通过命令kafka-server-start /usr/local/etc/kafka/server.properties启动,kafka的启动类是Kafka.scala,最终会调用Kafka.scala类的main方法。 另外,启动脚本中还会设置相关JVM参数,如log4j配置文件地址、...

2020-03-21 21:50:10 96 0

原创 kafka客户端--wakeup方法

wakeup 方法 生产端的send方法和消费端都有wakeup方法,其作用是将nio的poll方法中断,(nio poll方法中, waittime为-1表示永久阻塞,0表示立即返回) 生产端唤醒分析: 它的作用就是将 Sender 线程从poll方法的阻塞中唤醒,poll方法的作用是轮询...

2020-03-21 21:45:47 1102 0

原创 kafka网络客户端中的异步NIO原理

开始认为kafka生产端的future应用是线程中的异步操作, 直到后来看到消费端主要到只有一个线程的情况下収future的使用 NIO.2,主要包括新的: 异步 I/O(简称 AIO); Multicase 多播; Stream Control Transport Protocol(SC...

2020-03-21 21:09:08 89 0

原创 k8s的host网络模型

docker网络模型 1. Bridge模式(k8s pod使用的通信模型) docker默认的网络模式,为容器创建独立的网络命名空间,容器具有独立的网卡等所有单独的网络栈,是最常用的使用方式。容器从原理上是可以与宿主机乃至外界的其他机器通信的。同一宿主机上,容器之间都是连接到docker0这...

2020-03-19 23:36:59 59 0

原创 jdk Runtime类使用

一、得到系统内存的一些信息 @Test public void runtimeInfo() { Runtime runtime = Runtime.getRuntime(); int processors = runtime.availableProcessors(); ...

2020-03-15 22:38:51 70 0

原创 kafka消费者--加入consumergroup流程

一个消费者 group 由一个或者多个消费者组成,原则上每个消费者都需要有一个 groupId。这个可以在KafkaConsumer创建的时候指定。当消费者组只有一个消费者时,此时可以认为就是点对点模式;当有多个消费者时,就可以认为是发布订阅模式。 对于Broker 端的TopicPartiti...

2020-03-15 18:21:51 158 0

原创 kafka消费者--消息拉取流程

1、KafkaConsumer poll 详解 消息拉起主要入口为:KafkaConsumer#poll方法,其声明如下: public ConsumerRecords<K, V> poll(final Duration timeout) { // @1 return ...

2020-03-13 22:21:44 122 0

原创 kafka消费者--网络模型

Kafka 消费者端的设计相对生产者要复杂一些,其中一个主要的原因就是,消费者组等相关概念的引入。其中包含了:ConsumerCoordinator、Fetcher、ConsumerNetworkClient 组件,其组合层级示意图如下所示: 从上面主要组件关系可以看出,KafkaConsu...

2020-03-13 21:13:40 71 0

原创 kafka消费者--心跳检测

1. 相关配置项 Consumer读取partition中的数据是通过调用发起一个fetch请求来执行的。而从Kafka Consumer来看,它有一个poll方法。但是这个poll方法只是可能会发起fetch请求。原因是:Consumer每次发起fetch请求时,读取到的数据是有限制的,通过配...

2020-03-13 21:10:01 402 0

原创 kafka消费者--指定分区消费

kafka消费者有两种模式, 订阅模式和分配模式, 具体区别如下 模式 不同之处 相同之处 subscribe() 使用 Kafka Group 管理,自动进行 rebalance 操作 可以在 Kafka 保存 offset assign() 用户自己进行...

2020-03-12 21:56:48 148 0

原创 kafka消费者--tcp长连接讨论

一、何时创建TCP连接   首先明确的是,在构建KafkaConsumer实例时是不会创建任何TCP连接的;另外在调用诸如subscribe或assign的时候也不会创建任何TCP连接。那么TCP连接是在什么时候创建的呢?严格来说有几个可能的时间点。从粗粒度层面来说,我们可以安全地认为Socke...

2020-03-12 21:46:40 120 0

原创 kafka--事务和幂等(二)

消息传输保障 一般而言,消息中间件的消息传输保障有3个层级,分别如下。 at most once:至多一次。消息可能会丢失,但绝对不会重复传输。 at least once:最少一次。消息绝不会丢失,但可能会重复传输。 exactly once:恰好一次。每条消息肯定会被传输一次且仅传输一...

2020-03-11 21:56:54 115 0

原创 kafka--事务和幂等

在Kafka 0.11.0.0引入了EOS(exactly once semantics,精确一次处理语义)的特性,这个特性包括kafka幂等性和kafka事务两个属性 1 生产者幂等性 1.1 引入 幂等性引入目的: 生产者重复生产消息。生产者进行retry会产生重试时,会重复产生消息。...

2020-03-11 21:23:32 77 0

原创 shell脚本执行错误 $'\r':command not found

存现这种错误是因为 编写的 shell脚本是在win下编写的,每行结尾是\r\n 的Unix 结果行是\n 具体可以再notepad中查看所有字符显示 所以在Linux下运行脚本 会任务\r 是一个字符,所以运行错误,需要把文件转换下, 运行脚本 dos2unix 脚本名 ...

2020-03-11 20:36:25 40 0

原创 跳出foreach循环

Java8的foreach循环,这个循环里面,break和continue都不管用. 需要使用return,这个只能跳过本次循环,还是会继续执行for循环的 package com.lxk.java8.lambdaTest; import java.util.Arrays; import ...

2020-03-11 20:29:30 37 0

原创 kafka消费者--coordinate分析

Consumer Group 提及Consumer Group,最先想到的就是Group与Consumer Client的关联关系: 1,Consumer Group用group.id(String)作为全局唯一标识符 2,每个Group可以有零个、一个或多个Consumer Client ...

2020-03-07 19:56:36 84 0

原创 kafka--controller控制器

在Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。当检测到某个分区的ISR集合发生变化时,由控制...

2020-03-07 14:09:51 33 0

原创 应用zk实现集群选主

在实际使用ZooKeeper开发中,我们最常用的是Apache Curator。 它由Netflix公司贡献给Apache,目前版本2.7.0。 相信你在使用ZK API开发时会遇到让人头疼的几个问题,ZK连接管理、SESSION失效等一些异常问题的处理,Curator替我们解决了这些问题,通过对...

2020-03-06 22:27:23 44 0

原创 kafka--compact分析

Kafka是一个基于日志的流处理平台,一个topic可以有多个分区(partition),分区是复制的基本单元,在单节点上,一个分区的数据文件可以存储在多个磁盘目录中,每个分区的日志文件存储的时候又会分成一个个的segment,默认日志段(segment)的大小是1GB,segment是日志清理的...

2020-03-06 22:15:38 56 0

原创 kafka--指定时间戳消费

kafka 在 0.10.1.1 版本增加了时间索引文件,因此我们可以根据时间戳来访问消息。 时间戳可否自定义, 如果自定义时间戳写入先后错乱, 索引怎么弄???? 具体原理 具体使用 如以下需求:从半个小时之前的offset处开始消费消息,代码示例如下: package com....

2020-03-06 21:58:38 263 0

原创 Kerberos认证流程

第一步,账号A和KDC互相认证。 1、账号A利用哈希函数将密码转化成一把密钥,这里称它为Key-Client。 2、利用Key-Client将当前的时间戳加密,生成一个字符串。表示为“{时间戳} Key-Client”。 3、将上一步生成的字符串“{时间戳} Key-Client”、账号A的...

2020-02-29 20:26:05 80 0

原创 kafka自定义sasl验证插件

我们需要实现的类有以下几个: LoginModule Provider(client和server) SaslClientFactory SaslClient SaslServerFactory SaslServer LoginModule 要先实现LoginModule。这个Log...

2020-02-28 22:27:13 88 0

原创 Window下kafka SASL_PLAINTEXT认证方式实现

一:前情提要 SASL_PLAINTEXT是一种简单的用户名和密码认证机制,是一种kafka加密协议,PLAINTEXT是传输层协议 二:配置准备 1:JAVA_HOME 有JAVA_HOME的环境变量,且java版为1.8及以上,jdk目录无中文和空格; 2:KAFKA项目部署 下载...

2020-02-28 22:23:29 70 2

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