4.3.5 心跳和协调者的关系 客户端调用心跳任务的reset()方法会创建第一个延迟任务,这个方法的调用链如下。 确保协调者是已知的,即消费者客户端必须连接上管理消费组的协调者。 确保消费组是活动的,即消费者必须分配到分区。 注意:上面两个调用的方法都定义在对应的请求回调处理器中,前者是“获取消费组的协调者”请求(GroupCoordi.natorRequest),后者是“加入消费组”请求(Joi.叫roupRequest)。消费者和协调者进行交互操作,必须确保消费者已经知道并且连接上协调者所在的节点,如果都没有…

2021年4月20日 0条评论 35点热度 阅读全文

4.3.4 处理心跳结果的示例 如图4-34所示,客户端启动时会创建调度时间为0秒的延迟任务加入队列。客户端轮询的时间为2秒,会弹出延迟任务(因为延迟任务的调度时间小于当前时间),现在队列为空了。但是因为没有上一次心跳,只有上一次的会话重置时间,经过下面3个步骤的计算后,会重新创建一个调度时间为5秒的延迟任务加入队列。 (1)距离上次心跳的时间间隔=当前轮询的时间-上次会话的重置时间=2秒一0秒=2秒。 (2)距离下次心跳的时间间隔=心跳间隔距离上次心跳的时间间隔=5秒-2秒=3秒。 (3)下次心跳任务的时间=当前…

2021年4月19日 0条评论 42点热度 阅读全文

4.3.3 运行心跳任务 心跳任务(HeartbeatTask)作为一个延迟的任务,定义在抽象的客户端协调者类’(AbstractCoordi.nator)中。在4.2.3节第3小节“延迟的任务队列”中客户端在轮询时,只会取出延迟队列中调度时间小于当前时间(反过来更容易理解:当前时间大于调度时间)的延迟任务,将其弹出来并调用它的run()方法。如果任务的调度时间大于当前时间,它不会从队列中弹出,也不会执行run()方法。相关代码如下: 当调用延迟任务的run()方法时,说明当前时间已经超过这个延迟任务的调度时间,正…

2021年4月19日 0条评论 37点热度 阅读全文

4.3.2 心跳状态 每个消费者客户端都只有一个心跳任务,心跳对象(Heartbeat)除了记录心跳任务的元数据-一会话超时时间(timeout)、定时任务时间间隔(interval),还会记录当前心跳任务的状态一一最近的会话重置时间、最近的心跳发送时间、最近的心跳接收时间。相关代码如下: timeToNextHeartbeat()方法会计算当前时间到下一次调度的时间间隔,它跟上一次心跳任务的发生时间有关,会用来判断什么时候可以发送下一次心跳:如果返回值为0,表示当前时间减去上一次调度时间的差距大于心跳间隔,需要立…

2021年4月19日 0条评论 34点热度 阅读全文

5.3 延迟的加入组操作 协调者处理不同消费者的“加入组请求”,由于不能立即返回“加入组响应”给每个消费者,它会创建一个“延迟操作”,表示协调者会延迟发送“加入组响应”给消费者。但协调者不会为每个消费者的“加入组请求”都创建一个“延迟操作”,而是仅当消费组状态从“稳定”转变为“准备再平衡”,才创建一个“延迟操作”对象。 为了保证只创建一个“延迟操作”,只有消费组的状态为“稳定”时才可以创建“延迟操作”,并且在创建“延迟操作”的同时,更新消费组状态为“准备再平衡”。这样协调者在处理下一个消费者的“加入组请求”时,因为…

2021年4月13日 0条评论 69点热度 阅读全文

一、消费者和消费者组 1.简介 与生产者对应的是消费者, 应用程序可以通过KafkaConsumer来订阅主题, 并从订阅的topic中拉取消息。 与其他 一 些消息中间件不同的是: 在Kaflca 的消费理念中还有 一 层消费组(Consumer Group) 的概念, 每个消费者都有一 个对应的消费组。 当消息发布到主题后, 只会被投递给订阅它的每个消费组中的一 个消费者   如图所示, 某个主题中共有4个分区(Part山on): PO 、 Pl 、 P2 、 P3。 有两个消费组A和B都订阅了这个主…

2021年4月11日 0条评论 82点热度 阅读全文

什么是幂等? 任意多次执行所产生的影响均与一次执行的影响相同就可以称为幂等 什么是消息幂等? 当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消费并未对业务系统产生任何负面影响 为什么我们要保证幂等性,不保证幂等性,会不会有问题? 这个问题其实没法准确回答。回答这个问题的根源得从业务场景上进行分析。比如正常业务情况下,我们是不允许同个订单重复支付,这种业务场景我们就需要确保幂等性。再比如日志记录,这种业务场景,我们可能就不需要做幂等判断。 因此是否要保证幂等性,得基于业务进行…

2020年12月2日 0条评论 179点热度 阅读全文

前言 思考的过程往往比直接得到结论更加重要 kafka 应用场景 应用监控 网站用户行为追踪 流数据 持久性日志 基本概念 在说基本概念前,先看一下 kafka 的系统架构 Broker 一般而言,一台机器就是一个 broker,当然 1 台机器上可以部署多个 broker Producer 消息的生产者 Consumer 消息的消费者 Consumer Group 消费者组,组内可以有多个消费者,共享同一个 groupid。消费组内的消费者,一般情况下为同一个消费者部署多个实例。 Topic topic 在 ka…

2020年11月29日 0条评论 183点热度 阅读全文

申请机器 联系OP同学申请机器,Linux服务器一台、三台、五台、(2*n+1),Zookeeper集群的工作是超过半数才能对外提供服务,3台中超过两台超过半数,允许1台挂掉 ,是否可用偶数,其实没必要。如果有四台那么挂掉一台还剩下三台服务器,如果在挂掉一个就不行了,这里记住是超过半数。找到如下 3 台机器: 10.159.1.40 10.159.1.41 10.159.1.42 安装基础环境 安装Java环境支持,需要安装sun-java8,不再赘述。 目录规划 首先要注意在生产环境中目录结构要定义好,防止在项目…

2020年11月27日 0条评论 173点热度 阅读全文

我们很高兴地宣布 StreamNative 和 OVHcloud 开源了 “KoP“(Kafka on Pulsar)。KoP 将 Kafka 协议处理插件引入 Pulsar broker。这样一来,Apache Pulsar 就支持原生 Apache Kafka 协议。将 KoP 协议处理插件添加到现有 Pulsar 集群后,用户不用修改代码就可以将现有的 Kafka 应用程序和服务迁移到 Pulsar。这样,Kafka 应用程序就可以使用 Pulsar 的强大功能,例如: 利用企业级多租户特性简化运营。 避免数…

2020年11月25日 0条评论 199点热度 阅读全文