kafka权威指南-第四章kafka消费者问答式学习

1.什么是消费者和消费者群组?

消费者就是应用程序向kafka订阅主题,并从订阅的主题上接收消息的应用程序。

kafka消费者群群组是一个群体里的消费者订阅的都是同一个主题,每个消费者接收主题一部分分区的信息。当生产者的写入速度大于目前群组的读出速度的时候,可以通过增加消费者群组里面的消费者数量来接收消息。
当消费者数量超过主题的分区数量的时候,有一部分消费者就会呗闲置。

2.可以在消费者群组里面增加或者减少消费者吗?

可以的,kafka是十分灵活的。当在群组里面增加新的消费者的时候,它读取的是原本由其他消费者读取的消息。当一个消费者被关闭或者发生崩溃的时候,它就离开群组,原本由它读取的分区将会由群组里的其他消费者来读取。另外,管理员添加新分区的时候,会发生分区重分配。

3.什么是再均衡?

分区的所有权从一个消费者转移到另一个消费者,这样的行为被称为再均衡。
再均衡非常重要,它为消费者带来了高可用性和伸缩性。在在均衡期间,消费者无法读取消息,造成整个群组一小段时间的不可用。另外,当分区被重新分配给另外一个消费者时候,消费者当前的读取状态会丢失,它有可能还需要去刷新荤菜,在它重新恢复状态之前会拖慢应用孟旭。

4.群组协调器的broker如何确定消费者是否关闭或者崩溃?

通过心跳机制。发送心跳来维持它们和群组的从属关系。群组协调器会等待几秒,确认死亡才回触发再均衡。

5.如何创建kafka消费者

每一种语言都不一样,创建的时候需要定义3个必要的属性:
1. bootstrap.servers,指定集群的连接字符串
2. Key.deserializer
3. Value.deserializer

6.如何订阅主题

使用subscribe()方法接受一个主题列表作为参数,滴啊用subscribe()方法传入一个正则表达式,正则表达式可以匹配多个主题。

7.如何持续获得消息?

通过消息轮询的方式,消息轮询是消费者API的核心。通过一个简单的轮询想服务器请求数据。
需要持续的想消费者进行poll,否则会被认为死亡,出发再平衡。
poll返回一个列表
在退出程序之前使用close()方法关闭消费者,网络连接和socket也会随之关闭,并立即出发一次再均衡,而不是等待群组协调器发现它不在发送心跳并认定它已经死亡,因为那样需要很长的时间

很重要的一个事情是,我们要确保在轮询期间所做的任何处理工作都应该尽快完成。

8.消费者如何提交偏移量?

更新分区当前位置的操作叫做提交。消费者往一个叫做——consumer_offset的特殊主体发送消息,消息里包含每个分区的偏移量。
如果消费者一直处于运行状态,那么偏移量就没有什么作用。不过如果消费者发生崩溃或者有新的消费者加入群组,就会触发再均衡。完成再均衡之后,每个消费者可能分配到新的分区,而不是之前处理的那个。为了能继续之前的工作,消费者需要读取每个分区最后一次提交的偏移量,然后从偏移量指定的位置处理。

如果提交的偏移量小于客户端处理的最后一个消息的偏移量,那么处于两个偏移量之间的消息就会被重复处理。如果偏移量大于客户端处理的最后一个消息的偏移量,那么处于两个偏移量之间的消息就会消失。

9.提交偏移方式有哪些?

  1. 自动提交,设置enable.auto.commit为true,那么美国5是,消费者会自动从Poll()方法接受到的最大偏移量提交上去。风险在于如果提交之后第3s发生了再均衡,在均衡会后处理的消息会重复。所以在此调用之前最好确保素有当前调用返回的消息都以及处理完毕(在调用close()方法之前也会进行自动提交)
  2. 提交当前偏移量。把auto.commit.offset设为false,让应用程序决定何时提交偏移量。使用commitSync()提交偏移量最简单也最可靠。这个api会由poll()方法返回的最新偏移量,提交成功马上返回,如果提交视频,跑出异常。commitSync()将会提交由poll()返回的最新偏移量,所以在处理完所有记录后要确保调用commitSync()否则还是会由丢失消息的方希。如果发生再均衡,会出现重复处理。
  3. 异步提交,手动提交由一个不足之处,在broker对提交请求做出回应之前,应用程序会一直阻塞,这样会限制应用程序的吞吐量。可以使用异步提交API,我们只管发送提交请求,无需等待broker的响应。
  4. 同步与异步组合提交,在消费者关闭之前一般会组合使用commitAsync()和commitSync()
  5. 提交特定的偏移量

10.如果发生再均衡了,可是有一些数据还没有保存怎么办?

可以使用在均衡监听器。

11.kafka消费者一直在轮询,那么怎么退出呢?

如果确定退出循环,需要通过另外一个程序调用consumer.wakeup()

12.如果只有一个消费者,不需要消费者群组和再均衡怎么办?

只需要把主题或分区分配给消费者,然后开始读取消息并提交偏移量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值