![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
kafka
文章平均质量分 92
不二人生
刀光剑影江湖情,摧枯拉朽浪滔滔。功名利禄拂衣去,山高水远路迢迢。一个上得了厅堂下得了厨房、左手写诗右手写词的男人
展开
-
kafka系列之重试机制(15)
kafka 重试机制重试源码首先我们从KafkaProducer的send 方法入手我们看到其实客户端是不会直接发送数据的,而是将其加入到了一个缓存里面去,然后根据缓存的情况(result)判断要不要发送,发送也只是唤醒sender 对象RecordAccumulator.RecordAppendResult result = accumulator.append(tp, timestamp, serializedKey, serializedValue, headers, inter原创 2021-03-17 11:10:22 · 64280 阅读 · 4 评论 -
kafka系列之Coordinator(14)
Coordinator与消费者在数据库设计过程中,我们经常会有这样的情况下某个基础表会被多个视图或者存储过程引用修改基础表的时候,我们必须小心翼翼地,因为不会有任何提示告诉我们,如果继续修改,会不会造成视图或者存储过程有问题即便我们知道有问题,我们也没有办法去让视图和存储过程刷新得到表最新的信息如果你在创建视图中使用了select *,就会导致各种各样的bug"协调者"有些陌生,所谓协调者,在 Kafka 中对应的术语是 Coordinator,它专门为 Consumer Group原创 2021-03-16 20:43:50 · 64945 阅读 · 2 评论 -
kafka系列之Controller(13)
Controller控制器组件(Controller)是 Apache Kafka 的核心组件。它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群,例如分区领导者副本的选举。集群中任意一台 Broker 都能充当控制器的角色,但是,在运行过程中,只能有一个 Broker 成为控制器,行使其管理和协调的职责。换句话说,每个正常运转的 Kafka 集群,在任意时刻都有且只有一个控制器。对ZK的依赖Kafka 控制器大量使用 Watch 功能实现对集群的协调管理原创 2021-03-16 20:42:47 · 64772 阅读 · 0 评论 -
kafka系列之事务生产者(12)
事务生产者前面我们学习了幂等生产者,知道了幂等生产者存在的两个局限不支持跨回话和多分区以及它的优点就是使用简单,针对这两个不足我们看一下kafka 的另外一个解决方案——事务Kafka 自 0.11 版本开始也提供了对事务的支持,目前主要是在 read committed 隔离级别上做事情。它能保证多条消息原子性地写入到目标分区,同时也能保证 Consumer 只能看到事务成功提交的消息。事务型 Producer 能够保证将消息原子性地写入到多个分区中。这批消息要么全部写入成功,要么全部失败。事原创 2021-03-14 10:08:56 · 64498 阅读 · 1 评论 -
kafka系列之幂等生产者(11)
幂等生产者幂等”这个词原是数学领域中的概念,指的是某些操作或函数能够被执行多次,但每次得到的结果都是不变的在命令式编程语言(比如 C)中,若一个子程序是幂等的,那它必然不能修改系统状态。这样不管运行这个子程序多少次,与该子程序关联的那部分系统状态保持不变。在函数式编程语言(比如 Scala 或 Haskell)中,很多纯函数(pure function)天然就是幂等的,它们不执行任何的 side effect。幂等性有很多好处,其最大的优势在于我们可以安全地重试任何幂等性操作,反正它们也不会破坏我原创 2021-03-13 13:01:10 · 64276 阅读 · 0 评论 -
kafka系列之Consumer 消费模式(10)
消费模式Standalone Consumer(独立消费者)和消费者组相同的是,它们也要配置 group.id 参数值,但和消费者组调用 KafkaConsumer.subscribe() 不同的是,独立消费者调用 KafkaConsumer.assign() 方法直接消费指定分区。使用assign的consumer就是standalone consumer,一旦给消费者分配分区之后,就可以和consumer group 一样,在循环中调用‘poll’ 方法获取数据独立消费者就是没有使用消费者组机原创 2021-03-12 18:46:53 · 66011 阅读 · 1 评论 -
kafka系列之Consumer 拦截器(9)
Consumer 拦截器前面我们详细介绍了拦截器的原理,可以参考kafka系列之Producer 拦截器(06),其实拦截器的在很多技术中都有,关于拦截器的应用场景我们在前面一节中也介绍过了,这一节我们直接看一下消费者端拦截器的使用。我觉得为了学习kafka ,你可以打开kafka 的源码包,看看都有什么,你可以从kafka-client 包开始我们今天要介绍的ConsumerInterceptor 就是在consumer 包下面,我么前面介绍的很多东西你都可以在这里看到响应的代码,例如分区的分配策略原创 2021-03-11 17:41:02 · 64672 阅读 · 4 评论 -
kafka系列之offset管理那些事(8)
位移 offset每个消费者在消费消息的过程中必然需要有个字段记录它当前消费到了分区的哪个位置上,这个字段就是消费者位移(Consumer Offset),它是消费者消费进度的指示器。看上去Offset 就是一个数值而已,其实对于 Consumer Group 而言,它是一组 KV 对,Key 是分区,V 对应 Consumer 消费该分区的最新位移 TopicPartition->long不过切记的是消费者位移是下一条消息的位移,而不是目前最新消费消息的位移。提交位移主要是为了表征 Con原创 2021-03-11 11:38:48 · 64621 阅读 · 0 评论 -
kafka系列之消费者与分区(7)
消费者与分区消费者组我们知道 kafka 支持两种消息模型 队列模型和发布订阅模型(publish-subscribe)队列的处理方式是一组消费者从服务器读取消息,一条消息只由其中的一个消费者来处理发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。消费者组Kafka为这两种模型提供了单一的消费者抽象模型: 消费者组 (consumer group)。 消费者用一个消费者组名标记自己。 一个发布在Topic上消息被分发给此消费者组中的一个消费者。 假如所有的消费者原创 2021-03-11 11:38:00 · 65378 阅读 · 0 评论 -
kafka系列之Producer 拦截器(6)
Producer 拦截器拦截器(interceptor)是个相当新的功能,它是在Kafka 0.10版本被引入的,主要用于实现clients端的定制化控制逻辑。拦截器作为一个非常小众的功能,Kafka 拦截器自 0.10 版本被引入后并未得到太多的实际应用。Kafka 拦截器可以应用于包括客户端监控、端到端系统性能检测、消息审计等多种功能在内的场景,对于监控我们其实是利用拦截器实现了埋点类似的功能Spring 中的拦截器如果你用过 Spring Interceptor 或是 Apache Flum原创 2021-03-10 11:52:08 · 63944 阅读 · 0 评论 -
kafka系列之数据不丢失的重要保证—ACK(5)
ACK机制ACK 是acknowledge 的缩写,意思就是确认,这里的指的是producer 需要接受到来自Broker 的ack 信息,其实更准确的说法是接收到来自Leader partition 的ack 信息 ,需要注意的是ACK机制的开启,会直接影响Kafka集群的吞吐量和消息可靠性,而吞吐量和可靠性就像硬币的两面,两者不可兼得,只能平衡,所以要根据自己的业务特点进行取舍。ACK 是kafka 保证数据数据不丢失的重要手段。但是可能导致数据重复,当然这取决于你的配置。在开始之前我们先了解另外原创 2021-03-10 08:52:47 · 64467 阅读 · 0 评论 -
kafka系列之kafka分区与备份(4)
分区 Partition分区的意义提高负载均衡的能力kafak 通过分区来提高系统的负载均衡能力,主要通过以下两个方面进行保证的Kafka 创建Topic 的时候使得分区均匀的分布在各个Broker(集群节点)上kafka 在生产者发送消息到kafka 集群的时候,通过一定的负载均衡策略,使得数据均匀的分布在各个分区上这样通过在两个层面上的保证,从而保证了集群整体的负载均衡实现系统的高伸缩性(Scalability)不同的分布式系统对分区的叫法也不尽相同。比如在 Kafka 中叫分区,在原创 2021-03-09 18:46:29 · 64924 阅读 · 0 评论 -
kafka系列之kafka生产者与分区(3)
概要当我们发送消息之前,先问几个问题:每条消息都是很关键且不能容忍丢失么?偶尔重复消息可以么?我们关注的是消息延迟还是写入消息的吞吐量?举个例子,有一个信用卡交易处理系统,当交易发生时会发送一条消息到Kafka,另一个服务来读取消息并根据规则引擎来检查交易是否通过,将结果通过Kafka返回,对于这样的业务,消息既不能丢失也不能重复,由于交易量大因此吞吐量需要尽可能大,延迟可以稍微高一点。再举个例子,假如我们需要收集用户在网页上的点击数据,对于这样的场景,少量消息丢失或者重复是可以容忍的,延迟多大都原创 2021-03-09 17:52:06 · 63908 阅读 · 0 评论 -
kafka系列之Kafka基础架构(2)
Kafka基础架构在上一节我们也说过一些名词概念什么的,这一节我们就详细看一下这些概念都是什么,怎样去理解。Topic (主题)主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。这里的逻辑容器可以看做是消息的类别,我们将同一类的消息放在一个Topic你可以通过kafka 提供的命令来查看当前kafka 集群都有哪些分区Partition(分区)Partition 是 Kafka 中比较特色的部分,一个 Topic 可以分为多个 Partition,每个 Partition原创 2021-03-08 17:21:53 · 62832 阅读 · 2 评论 -
kafka系列之kafka入门概论(1)
概论什么是消息中间件举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了原创 2021-03-07 16:30:28 · 62403 阅读 · 0 评论