随笔分类 -  kafka

摘要:如下图中分区到 日 志的虚线表示 : 业务逻辑层的一个分区对应物理存储层的一个日志 。 消息集到数据文件的虚线表示 : 客户端发送的消息集最终会写入日志分段对应的数据文件,存储到Kafka的消息代理节点 。 Kafka服务在启动时会先创建各种相关的组件,最后才会创建 KafkaApis 。 业务组件 阅读全文
posted @ 2018-10-30 20:33 青青子衿J 编辑
摘要:-Kafka是一个分布式的( distributed )、分区的( partitioned )、复制的( replicated )提交日志( commitlog )服务 。 “分布式”是所有分布式系统的特性 ;“分区”指消息会按照分区分布在集群的所有节点上 ;“复制”指每个分区都会有多个副本存储在不 阅读全文
posted @ 2018-10-30 14:55 青青子衿J 编辑
摘要:协调者保存的消费组元数据中记录了消费组的状态机 , 消费组状态机的转换主要发生在“加入组请求”和“同步组请求”的处理过程中 。协调者处理“离开消费组请求”“迁移消费组请求”“心跳请求” “提交偏移量请求”也会更新消费组的状态、机,或者依赖消费组的状态进行不同的处理。消费者要加入消费组 , 需要依次发 阅读全文
posted @ 2018-10-29 14:49 青青子衿J 编辑
摘要:消费者客户端使用“消费者的协调者对象”( ConsumerCoordinator )来代表所有和服务端协调者节点有关的请求处理,比如心跳请求、获取和提交分区的偏移量(自动提交任务)、发送“加入组请求”和“同步组请求”从协调者获取到分区 。 服务端处理客户端请求的人口都是KafkaApis类,它会针对 阅读全文
posted @ 2018-10-26 15:58 青青子衿J 编辑
摘要:消费者客户端轮询的3个步骤:发送拉取请求,客户端轮询,获取拉取结果 。 消费者在发送拉取请求之前,必须首先满足下面的两个条件。- 确保消费者已经连接协调者, 即找到服务端中管理这个消费者的协调者节点 。- 确保消费者已经分配到分区, 即获取到协调者节点分配给消费者的分区信息 。 消费者客户端除了从协 阅读全文
posted @ 2018-10-26 11:10 青青子衿J 编辑
摘要:消费组发生再平衡时分区会被分配给新的消费者,为了保证新消费者能够从分区的上一次消费位置继续拉取并处理消息,每个消费者需要将分区的消费进度,定时地同步给消费组对应的协调者节点 。新AP I为客户端提供了两种提交偏移盐的方式:异步模式和同步模式 。 另外,如果消费者客户端设置了向动提交( enable 阅读全文
posted @ 2018-10-25 17:30 青青子衿J 编辑
摘要:消费者拉取数据是在拉取器中完成的,发送心跳是在消费者的协调者上完成的,但并不是说拉取器和消费者的协调者就没有关联关系 。 “消费者的协调者”的作用是确保客户端的消费者和服务端的协调者之间的正常通信,如果消费者没有连接上协调者(比如协调者认为消费者挂了,或者消费者认或者消费者认为协调者挂了),那么拉取 阅读全文
posted @ 2018-10-25 14:38 青青子衿J 编辑
摘要:消费者拉取消息 消费者创建拉取请求的准备工作,和生产者创建生产请求的准备工作类似,它们都必须和分区的主副本交互。一个生产者写入的分区和消费者分配的分区都可能有多个,同时多个分区的主副本有可能在同一个节点上 。 为了减少客户端和服务端集群的网络连接,客户端并不是以分区为粒度和服务端交互,而是以服务端节 阅读全文
posted @ 2018-10-24 21:15 青青子衿J 编辑
摘要:消费者拉取钱程拉取每个分区的数据,会将分区的消息集包装成一个数据块( FetchedDataChunk )放入分区信息的队列中 。 而每个队列都对应一个消息流( KafkaStream ),消费者客户端选代消息流,实际上是迭代每个数据块中消息集的每条消息 。 一个队列包含多个数据块,每个数据块对应一 阅读全文
posted @ 2018-10-23 10:43 青青子衿J 编辑
摘要:消费者连接器通过再平衡操作分配到的分区相当于t作任务,任务需要由工作线程完成。 生产者要写消息到服务端的分区,这是通过Sender工作线程完成的,消费者要读服务端分区的消息则通过拉取管理器的拉取线程完成。 拉取线程管理器 消费者的拉取管理器( ConsumerFetcherManager )管理了当 阅读全文
posted @ 2018-10-22 16:44 青青子衿J 编辑
摘要:消费者再平衡操作 消费者连接器的核心处理逻辑是再平衡操作,它起了承上启下的作用。初始化消费者连接器只是“创建了队列和消息流”,再平衡操作会“为消费者重新分配分区” 。 只有为消费者分配了分区,拉取线程才会开始拉取分区的消息 。因为分区要被重新分配,分区的所有者都会发生变化 ,所以在还没有重新分配分区 阅读全文
posted @ 2018-10-22 13:12 青青子衿J 编辑
摘要:1. 使用消费组实现消息队列的两种模式 分布式的消息系统Kafka支持多个生产者和多个消费者,生产者可以将消息发布到集群中不同节点的不同分区上;消费者也可以消费集群中多个节点的多个分区上的消息 。 写消息时,多个生产者可以写到同一个分区 。 读消息时,如果多个消费者同时读取一个分区,为了保证将日志文 阅读全文
posted @ 2018-10-22 10:09 青青子衿J 编辑
摘要:消费者启动和初始化 消费者的配置信息要指定连接的ZK集群以及消费组编号 。 消费者客户端会通过消费者连接器( ConsumerConnector)连接ZK集群,获取分配的分区, 创建每个主题对应的消息流( KafkaStream ),最后迭代消息流,读取每条消息,并完成具体的业务处理逻辑。 消费者客 阅读全文
posted @ 2018-10-19 18:20 青青子衿J 编辑
摘要:KafkaServer是Kafka服务端的主类, KafkaServer中和网络层有关的服务组件包括 SocketServer、KafkaApis 和 KafkaRequestHandlerPool后两者都使用了 SocketServer暴露出来的请求通道( RequestChannel )来处理网 阅读全文
posted @ 2018-10-18 16:38 青青子衿J 编辑
摘要:消息系统通常由生产者(producer )、 消费者( consumer )和消息代理( broker ) 三大部分组成,生产者会将消息写入消息代理,消费者会从消息代理中读取消息 。 对于消息代理而言,生产者和消费者都属于客户端:生产者和消费者会发送客户端请求给服务端,服务端的处理分别是存储消息和获 阅读全文
posted @ 2018-10-18 14:41 青青子衿J 编辑
摘要:在 0.10 版本之前, Kafka仅仅作为一个消息系统,主要用来解决应用解耦、 异步消息 、 流量削峰等问题。 在0.10版本之后, Kafka提供了连接器与流处理的能力, 它也从分布式的消息系统逐渐成为一个流式的数据平台 。 Kafka 流式数据平台 作为一个流式数据平台,最重要的是要具备下面3 阅读全文
posted @ 2018-10-17 16:00 青青子衿J 编辑
摘要:本文截取自《大数据架构详解》。 Kafka架构如图: 整个架构中包括三个角色。 生产者(Producer):消息和数据生产者 代理(Broker):缓存代理,Kafka的核心功能 消费者(Consumer):消息和数据消费者 整体架构很简单,Kafka给Producer和Consumer提供注册的接 阅读全文
posted @ 2018-10-12 16:31 青青子衿J 编辑
摘要:Kafka 一般被认为是一个强大的消息总线,可以传递事件流,但没有处理和转换事件的能力。 Kafka 可靠的传递能力让它成为流式处理系统完美的数据来源。很多基于 Kafka 构建的流式处理系统都将 Kafka 作为唯一可靠的数据来源,如 Apache Storm 、 Apache Spark Str 阅读全文
posted @ 2018-10-11 15:14 青青子衿J 编辑
摘要:不同的集群之间相互依赖,管理员需要不停地在集群间复制数据。大部分数据库都支持复制 ( replication ),也就是持续地在数据库服务器之间复制数据 。 因为前面已经使用过“复制”这个词来描述在同一个集群的节点间移动数据,所以我们把集群间的数据复制叫作镜像 ( mirroring )。 Kafk 阅读全文
posted @ 2018-10-10 13:09 青青子衿J 编辑
摘要:在使用 Kafka 构建数据管道时,通常有两种使用场景 : 第一种,把 Kafka 作为数据管道的两个端点之一 ,例如,把 Kafka 里的数据移动到 S3 上,或者把 MongoDB 里的数据移动到 Kafka 里;第二种,把 Kafka 作为数据管道两个端点的中间媒介,例如,为了把 Twitte 阅读全文
posted @ 2018-10-09 18:41 青青子衿J 编辑