Kafka消费者架构

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中的许多线程中运行多个消费者,会发生什么?

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

原文发布于微信公众号 - IT技术精选文摘(ITHK01)

原文发表时间:2017-08-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Youngxj

全民k歌解析工具

64540
来自专栏月色的自留地

Mac版AppStore无法下载、升级错误处理

16140
来自专栏我爱编程

关于 Really Simple SSL 插件的使用笔记

首先,在插件 Really Simple SSL 的默认配置里,插件本身是自带301重导向到 https 设定的。 其次也默认内部的 WordPress 30...

18530
来自专栏禹都一只猫博客

ubuntu16.04国内apt源以及官方源

2.7K30
来自专栏更流畅、简洁的软件开发方式

【自然框架】——自然框架的命名空间

  为什么要有命名空间?类多了不便于管理,把他们给他分个类整理一下,便于管理。   那么命名空间就有了两个使命,分类和标识。其实标识也是一种分类。 我们打开Re...

23860
来自专栏逸鹏说道

异步方法不能使用ref和out的解决方法

异常处理汇总-后端系列:http://www.cnblogs.com/dunitian/p/4523006.html ? 应用场景==》后端现在都是用异步方法...

365100
来自专栏FreeBuf

【思路分享】如何在Win下查杀Linux恶意文件

在对linux系统应急处理时,常需要查杀系统中是否存在恶意文件,但纯手工检查的话,难免会有遗漏,虽然在linux系统中也有一些专门门的查杀工具,但终究维护的人少...

26380
来自专栏木头编程 - moTzxx

城市三级联动功能实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

50530
来自专栏林德熙的博客

安装 wordpress 出现 抱歉,我不能写入wp-config.php文件 下载 wordpress安装

本文告诉大家如何安装 wordpress ,在安装过程出现 抱歉,我不能写入wp-config.php文件如何解决

21910
来自专栏腾讯NEXT学位

【干货】加强 web 静态资源安全方法之SRI

我们通常会用CSP加强站点JS资源的执行限制,有效降低XSS攻击;我们通过HTTPS链接加密资源,减少站点资源劫持风险等等大量的前端安全方案。但你可能还没听说...

8K30

扫码关注云+社区

领取腾讯云代金券