
KAFKA
文章平均质量分 64
yanerhao
信雅之言,微言大意
展开
-
go saram 消费者调用逻辑
comsumer.goConsumePartition(topic string, partition int32, offset int64)->c.refBrokerConsumer(leader)->c.newBrokerConsumer(broker)->go withRecover(bc.subscriptionConsumer)->bc.fetchNewMessages()->bc.broker.Fetch(request)b原创 2020-06-17 15:08:57 · 425 阅读 · 1 评论 -
kafka controller作用
controller主要依靠ZK完成对集群broker和分区的管理如集群broker信息、分区选举ISR等。ZK主要一二级节点信息如下原创 2020-06-01 20:35:31 · 5222 阅读 · 0 评论 -
kafka broker常见请求类型分析
请求包括头部和请求体。请求体因请求类型不同而不同,请求头部格式固定包括:api_key:请求类型如producer请求/fetch请求/元数据请求api_version:给定一请求类型的具体版本correlation_id:类似request_id,用于定位问题client_id:发送该请求的客户端ID响应也分为头部和响应体,响应头部格式固定:correlationd_id:请求字段中的correlation_id注:[x]代表是一个数组,数组中每个元素是x一 produce原创 2020-05-31 15:40:39 · 500 阅读 · 0 评论 -
KAFKA 服务端日志LEO和HW机制带来的问题及其解决方案
一、KAFKA 服务端日志LEO和HW带来的问题KAFKA 服务端日志LEO和HW无论是leader还是follow的HW更新都需要第二轮fetch才能完成,若在第二轮fetch中follow或leader崩溃则有可能带来数据丢失或数据不一致问题。1.1 数据丢失该主题有两个副本,其中A是leader,B是follow。设min.insync.replicas=1 and acks=-1则当生产者发送信息后只要leader A 写入到底层,此时kafka就好通知生产者发送成功。按照现有H原创 2020-05-24 19:53:33 · 693 阅读 · 0 评论 -
KAFKA 服务端日志LEO和HW说明
KAFKA 服务端一个日志文件包含两个特性:日志末端位移(log-end-offset)和高水印(high-watermask),无论是LEADER还是follow副本均含有这两个特性:LEO:该副本底层log文件下一条要写入的消息的位移,例如LEO=10则当前文件已经写了了10条消息,位移是[0,10)。HW:所有分区已提交的的位移,HW之外consumer无法消费,一般HW<=LEO。一 LEO更新机制1.1 follow的LEO更新机制follow的LEO更新机制包括foll原创 2020-05-24 16:14:40 · 734 阅读 · 2 评论 -
KAFKA 生产者消费者的“事前事后”
一 生产者的“事前事后”---producer拦截器producer拦截器主要实现生产者端定制化功能需求。对于producer,拦截器使得用户可以在消息发送前以及响应回调时有机会对数据做定制化修改。若多个拦截器作用于同一个消息则形成一个拦截链。主要实现方法:onSend(record):该方法运行在用户主线程中也就是send方法中。producer确保在消息被序列化后计算分区前调用。用户可以对消息做任何操作修改。onAcknowledgaement(metadata,exceptio原创 2020-05-22 22:40:44 · 296 阅读 · 0 评论 -
kafka消费者组重平衡分析
一 概念一个consumer group 通过一定的分配算法来分配消费订阅的topic的所有分区。具体有协调者完成重平滑流程。二 触发条件组成员发送变更,如consumer增加或减少如consumer进程崩溃、consumer进程所在机器宕机、consumer异常比如poll间隔太久;组订阅的topic数变更,如使用基于正则的订阅,当匹配正则的新的topic创建时会触发;组订阅topic的分区数变化,如使用命令增加了topic的分区数。三 分区分配算法range算法round原创 2020-05-22 20:51:41 · 609 阅读 · 0 评论 -
kafka生产者消费者同步与异步
一 生产者发送的同步与异步生产者发送消息依靠send方法,主要要同步和异步两种:异步发送producer.send(record,callback)callback就是对发送消息后的回调。该方法输入参数是metaData和exception:当消息异步发送成功则exception为空;反之若发送失败则metadata为空exception非空。同步发送producer.send(record).get()通过调用feature.get无限等待。若没有失败则返回对应的metaDat原创 2020-05-22 11:36:12 · 4141 阅读 · 1 评论 -
kafka 生产端指定分区和消费端分区指派
生产端指定分区主要依靠分配器,对于kafka默认分配器,主要工作流程:1 如果消息自带key则对key可以hash然后选择目标分区;2 如果消息无key则采用RoundRobin轮询算法,这样可以最大限度确保消息在所有分区的均匀性;3 特别的,生产者API赋予用户自行指定分区的权利,在发送消息时如果指定了分区则可以跳过以上分区法则。消费端分区指派在 kafka 中,存在着两种为消费组组内的消费者分区的分配策略。一种是 RangeAssignor 分配策略(范围分区),另一种是Rou.原创 2020-05-19 15:17:57 · 2353 阅读 · 0 评论 -
KAFKA高吞吐量分析
KAFKA高吞吐量,一般在几万甚至几十万消息,原因如下1.写入写入的PAGE CACHE,读时先优先读缓存的,缓存都是内存操作比较快;2 不直接参与磁盘IO;3 写追加到文件,顺序读写4 读时采用零拷贝技术直接加载在网络socket缓存,避免多场数据拷贝和上下文切换。...原创 2020-05-18 14:56:58 · 1060 阅读 · 0 评论 -
生产者消费者如何知道分区LEADER
因为生产者、消费者都只通分区的LEADER打交道,故生产者、消费者需要从众多分区副本中找到LEADER。一、生产者生产者通过元数据请求,请求包含了客户端感兴趣的主题列表;服务端返回的响应指出了这些主题包含哪些分区以及每个分区的LEADER。元数据请求可以发送给任意一个broker,所有broker都缓存了这些信息。如果一个客户端发送数据请求(非元数据请求)到一个非LEADER的broker,该客户端会收到一个“非分区LEADER”的错误响应。一般的,生产者会将分区信息缓存下来,往LEADER分区原创 2020-05-14 15:25:38 · 728 阅读 · 0 评论 -
Kafka主题参数说明
producer端batch.size 是producer批量发送的基本单位,同一个分区的多条消息会封装进一个batch。默认是16KB,当batch满才会发送batch中所有消息。linger.ms是sender线程在检查batch是否ready时候判断有没有过期,默认是0ms,超过该值就会直接发送batch,以保证延时不会太高。compression.type,有GZIP,SNA...原创 2019-11-11 16:19:17 · 953 阅读 · 0 评论 -
KAFKA里两个主要的消费者再平衡和分区选取
一、消费者再平衡消费者再平衡是针对消费者组来说,将主题内分区所有权进行重新分配。主要触发条件包括消费者退出、消费者新增、分区减少、主题增加等。每个消费者组都会从众多broker中选出一群组协调器,用以再平衡的协调,再平衡对象是消费者,Leader是第一个加入的消费者。消费者加入群组时,会想群组协调器发送一个JointGroup请求。第一个加入的消费者自动成为群主。群主从群组协调器获取群组成员列表(最近发送心跳的活跃消费者)然后给每个组内消费者分配分区如range、roundrobin算法。分原创 2020-05-14 10:43:21 · 416 阅读 · 0 评论