2017-08-25 64 views
3

我正在浏览卡夫卡的消费者配置。卡夫卡消费品(集团)触发重新平衡的条件

是什么将触发一个再平衡的参数?例如下面的参数将会是?任何其他我们需要更改或默认的参数都可以满足要求

connections.max.idle.ms在此配置指定的毫秒数后关闭空闲连接。长540000中

另外,我们有三个不同的主题

  1. 它是一个坏主意,有相同的消费集团(相同的ID)从多个主题消费。
  2. 假设上述情况是否有效(不一定是最佳实践) - 如果话题之一的话务量很小,是否会导致消费者群体重新平衡。

    后续问题 - 影响再平衡及其表现的因素有哪些?

+0

你问关于最新版本0.11吗? –

+0

@HansJespersen我们在0.10.x –

回答

1

这些条件将触发一组再平衡:对任何主题

主题创建的订阅列表的改变

分区数或删除

现有消费群成员死亡

新成员通过加入API

它是一个坏主意,有相同的消费集团(相同的ID)从多个主题耗时添加到现有的消费群。

至少它是有效的,对于好或坏,这取决于你的详细情况。 这是由官方Java客户端API的支持,看到这样的方法定义:

public void subscribe(Collection<String> topics, 
      ConsumerRebalanceListener listener) 

它接受主题的集合。

如果其中一个话题的话务量很轻,是否会导致消费者群体重新平衡。

不,因为没有列出条件。如果我们从主题方面考虑它。只有在主题被删除或分区计数改变时,才会发生rebalcance。

更新。

感谢@Hans Jespersen对session和hearbeat的评论。

这是卡夫卡消费者的Javadoc引用:

订阅一组主题之后,当调用轮询(长)消费者将自动加入该群。民意调查API旨在确保消费者的生活。只要您继续调用投票,消费者就会留在该组中,并继续接收来自其分配的分区的消息。 在封面下方,轮询API向服务器发送定期心跳;当你停止调用投票(可能是因为引发异常),那么将不会发送心跳。如果在服务器收到检测信号之前经过配置的会话超时的一段时间,则消费者将被退出该组并且其分区将被重新分配。

并在你的问题,你问什么会触发再平衡

在这种情况下的参数,有两个CONFIGS已与再平衡的关系。它是session.timeout.msmax.poll.records。其手段是显而易见的。

由此我们也可以知道,在投票之间做很多工作是一种不好的做法,开销工作可能会阻止心跳并导致会话超时。

+1

在最大轮询间隔或会话超时范围内也无法发送检测信号或调用poll()。 –

+1

为什么从一个消费群体的多个主题中消费不好?似乎具体情况。 – PragmaticProgrammer

+1

@亨斯柏斯恩,是的,谢谢你的分享。这种情况可以包含在“消费者组的现有成员死亡”状况中。你怎么看? – GuangshengZuo