摘要: 如下图中分区到 日 志的虚线表示 : 业务逻辑层的一个分区对应物理存储层的一个日志 。 消息集到数据文件的虚线表示 : 客户端发送的消息集最终会写入日志分段对应的数据文件,存储到Kafka的消息代理节点 。 Kafka服务在启动时会先创建各种相关的组件,最后才会创建 KafkaApis 。 业务组件 阅读全文
posted @ 2018-10-30 20:33 青青子衿J 阅读(453) 评论(0) 推荐(0) 编辑
摘要: -Kafka是一个分布式的( distributed )、分区的( partitioned )、复制的( replicated )提交日志( commitlog )服务 。 “分布式”是所有分布式系统的特性 ;“分区”指消息会按照分区分布在集群的所有节点上 ;“复制”指每个分区都会有多个副本存储在不 阅读全文
posted @ 2018-10-30 14:55 青青子衿J 阅读(668) 评论(0) 推荐(1) 编辑
摘要: 协调者保存的消费组元数据中记录了消费组的状态机 , 消费组状态机的转换主要发生在“加入组请求”和“同步组请求”的处理过程中 。协调者处理“离开消费组请求”“迁移消费组请求”“心跳请求” “提交偏移量请求”也会更新消费组的状态、机,或者依赖消费组的状态进行不同的处理。消费者要加入消费组 , 需要依次发 阅读全文
posted @ 2018-10-29 14:49 青青子衿J 阅读(690) 评论(0) 推荐(0) 编辑
摘要: 协调者处理不同消费者的“加入组请求”,由于不能立即返回“加入组响应”给每个消费者,它会创建一个“延迟操作”,表示协调者会延迟发送“加入组响应”给消费者 。 但协调者不会为每个消费者的 “加入组请求”都创建一个 “延迟操作”,而是仅当消费组状态从“稳定”转变为“准备再平衡”,才创建一个“延迟操作”对象 阅读全文
posted @ 2018-10-27 16:58 青青子衿J 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 消费者客户端使用“消费者的协调者对象”( ConsumerCoordinator )来代表所有和服务端协调者节点有关的请求处理,比如心跳请求、获取和提交分区的偏移量(自动提交任务)、发送“加入组请求”和“同步组请求”从协调者获取到分区 。 服务端处理客户端请求的人口都是KafkaApis类,它会针对 阅读全文
posted @ 2018-10-26 15:58 青青子衿J 阅读(871) 评论(0) 推荐(0) 编辑
摘要: 消费者客户端轮询的3个步骤:发送拉取请求,客户端轮询,获取拉取结果 。 消费者在发送拉取请求之前,必须首先满足下面的两个条件。- 确保消费者已经连接协调者, 即找到服务端中管理这个消费者的协调者节点 。- 确保消费者已经分配到分区, 即获取到协调者节点分配给消费者的分区信息 。 消费者客户端除了从协 阅读全文
posted @ 2018-10-26 11:10 青青子衿J 阅读(1111) 评论(0) 推荐(0) 编辑
摘要: 消费组发生再平衡时分区会被分配给新的消费者,为了保证新消费者能够从分区的上一次消费位置继续拉取并处理消息,每个消费者需要将分区的消费进度,定时地同步给消费组对应的协调者节点 。新AP I为客户端提供了两种提交偏移盐的方式:异步模式和同步模式 。 另外,如果消费者客户端设置了向动提交( enable 阅读全文
posted @ 2018-10-25 17:30 青青子衿J 阅读(1185) 评论(0) 推荐(0) 编辑
摘要: 消费者拉取数据是在拉取器中完成的,发送心跳是在消费者的协调者上完成的,但并不是说拉取器和消费者的协调者就没有关联关系 。 “消费者的协调者”的作用是确保客户端的消费者和服务端的协调者之间的正常通信,如果消费者没有连接上协调者(比如协调者认为消费者挂了,或者消费者认或者消费者认为协调者挂了),那么拉取 阅读全文
posted @ 2018-10-25 14:38 青青子衿J 阅读(611) 评论(0) 推荐(0) 编辑
摘要: 消费者拉取消息 消费者创建拉取请求的准备工作,和生产者创建生产请求的准备工作类似,它们都必须和分区的主副本交互。一个生产者写入的分区和消费者分配的分区都可能有多个,同时多个分区的主副本有可能在同一个节点上 。 为了减少客户端和服务端集群的网络连接,客户端并不是以分区为粒度和服务端交互,而是以服务端节 阅读全文
posted @ 2018-10-24 21:15 青青子衿J 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 新版本的消费者采用Java重新实现。 但不管采用什么版本实现,消费者消费消息的主要工作没有太大变化 , 比如为消费者分配分区、拉取线程拉取消息、客户端消费消息、更新拉取状态、提交偏移量 。 1. 消费者的高级API和新API 客户端使用新API ,主要调用了 KafkaConsumer类提供的两个方 阅读全文
posted @ 2018-10-24 15:19 青青子衿J 阅读(407) 评论(0) 推荐(0) 编辑