前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kafka消费者架构

Kafka消费者架构

作者头像
用户1263954
发布2018-01-30 15:26:13
1.4K0
发布2018-01-30 15:26:13
举报
文章被收录于专栏:IT技术精选文摘IT技术精选文摘

Kafka消费者组

您可以通过用例或功能将消费者组合成消费者组。一个消费者组可能负责将记录传送到高速的、基于内存的微服务,而另一个消费者组将这些记录传输到Hadoop。消费者组有自己的名称以便于从其它消费者组中区分出来。

消费者组具有唯一的ID。每个消费者组是一个或多个Kafka主题的订阅者。每个消费者组维护其每个主题分区的偏移量。如果您需要多个订阅者,那么您有多个消费者组。一个记录只交付给消费者组中的一个消费者。

消费者组中的每个消费者处理记录,并且该组中只有一个消费者将获得相同的记录。消费组内的消费者均衡的处理记录。

消费者将记住他们上次离开时的偏移量

消费者组每个分区都有自己的偏移量

Kafka消费者分担负载

Kafka消费者将消费在一个消费者组内的消费者实例上所划分的分区。消费者组中的每个消费者都是分区的“公平共享”的独家消费者。这就是Kafka如何在消费者组中对消费者进行负载平衡。消费者组内的消费者成员资格由Kafka协议动态处理。如果新消费者加入消费者组,它将获得一个分区份额。如果消费者死亡,其分区将分发到消费者组中剩余的消费者。这就是Kafka如何在消费者组中处理消费者的失败。

Kafka消费者故障转移

消费者在成功处理记录之后通知Kafka Broker,从而将偏移量提前。

如果消费者在向Kafka Broker发送提交偏移量之前失败,则不同的消费者可以从最后一次提交的偏移量继续处理。

如果消费者在处理记录后失败,但在向Broker发送提交之前,则可能会重新处理一些Kafka记录。在这种情况下,Kafka实现至少一次行为,您应该确保消息(记录传送)是幂等的。

偏移量管理

Kafka将偏移数据存储在名为“__consumer_offset”的主题中。这些主题使用日志压缩,这意味着它们只保存每个键的最新值。

当消费者处理数据时,它应该提交偏移量。如果消费者进程死机,则可以根据存储在“__consumer_offset”中的偏移量启动并开始读取它所在的位置,或者由商量好的消费者组中的另一个消费者可以接管。

Kafka消费者可以看到什么?

Kafka消费者可以消费哪些记录?消费者无法读取未复制的数据。Kafka消费者只能消费分区之外的“高水印”偏移量的消息。 “日志结束偏移”是写入日志分区的最后一个记录的偏移量,生产者写入下一个记录。

“高水印”是成功复制到所有分区追随者的最后一条记录的偏移量。消费者只读取“高水印”。

消费者对分区进行负载分担

来自同一消费者组的单个消费者只能访问单个分区。如果消费者组计数超过分区数量,则额外的消费者保持闲置。 Kafka可以使用空闲的消费者进行故障切换。如果存在比消费者组更多的分区,那么一些消费者将从多个分区读取。

一个有两个服务器拥有4个分区的Kafka集群

请注意,服务器1具有主题分区P2,P3和P4,而服务器2具有分区P0,P1和P5。请注意,消费者组A的消费者C0正在处理P0和P2的记录。请注意,任何消费者从任何消费者组中都不会共享单个分区。请注意,每个分区都获得相应主题分区的公平份额。

多线程的Kafka消费者

您可以通过使用线程在JVM进程中运行多个Consumer。

多个线程运行消费者

如果处理记录需要一段时间,单个消费者可以运行多个线程来处理记录,但是更难以管理每个线程/任务的偏移量。如果一个消费者运行多个线程,则相同分区上的两个消息可以被两个不同的线程处理,这使得很难在没有复杂的线程协调的情况下保证记录传递顺序。如果处理单个任务需要很长时间,但是尝试避免此设置,则此设置可能是适当的。

每个线程一个消费者

如果您需要运行多个消费者,则在自己的线程中运行每个消费者。这样,Kafka可以向消费者提供记录批次,消费者不必担心偏移顺序。每个消费者的线程使得管理偏移更容易。管理故障切换(每个进程运行X个消费者线程)也更简单,因为您可以允许Kafka首当其冲的工作。

Kafka消费者回顾

什么是消费者组?

消费者组是一组相关消费者,执行任务,例如将数据放入Hadoop或向服务发送消息。消费者组每个分区具有唯一的偏移量。不同的消费者组可以从分区中的不同位置读取。

每个消费者组是否有自己的偏移量?

是的。消费者组对于主题中的每个分区都有自己的偏移量,这对于其他消费者组具有唯一性。

消费者什么时候可以看到记录?

记录完全复制到所有跟随者后,消费者可以看到记录。

如果消费者比分区更多,会发生什么?

额外的消费者仍然空闲,直到另一个消费者死亡

如果在同一个JVM中的许多线程中运行多个消费者,会发生什么?

每个线程管理该消费者组的一个分区份额。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术精选文摘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档