360SDN.COM

首页/Kafka/列表

Kafka消费者架构

来源:IT技术精选文摘  2017-09-20 14:09:01    评论:0点击:

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

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

阅读原文

为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权