kafka中可以在一个项目中指定多个consumer吗

potatohouse 2020-04-02 11:36:28
还是说只能启动几套进程就是几个consumer。同一个消费组的情况下,可以在一个进程中启动多个consumer吗?

需要开发的时候如何配置呢?
...全文
720 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingyuan18 2020-05-22
  • 打赏
  • 举报
回复
引用 4 楼 doublepotato 的回复:
[quote=引用 2 楼 LinkSe7en 的回复:] 能举例讲一下,如何避免替补的这个消费者,避免重复消费吗。是说比如在外部数据库存储已经消费的offset吗,还是kafka内部能做什么配置?
避免kafka重复消费的终极方案是consumer端实现幂等消费消费,减少批次消息消费,提升吞吐量这些都是战术手段,考虑网络是不可靠条件下这种问题是无解的,就像拜占庭将军问题一样
LinkSe7en 2020-05-20
  • 打赏
  • 举报
回复
引用 4 楼 doublepotato 的回复:
[quote=引用 2 楼 LinkSe7en 的回复:] 能举例讲一下,如何避免替补的这个消费者,避免重复消费吗。是说比如在外部数据库存储已经消费的offset吗,还是kafka内部能做什么配置?
通用做法是 1、控制每批消息尽可能少(但不能1条1批) 2、消费超时适中 这两者需要结合你的消费逻辑进行调优 至于外部数据库校验这块 要看你业务逻辑是怎么绑定了。比如消费1条就往数据库进行写入1条记录,那在消息里就要有唯一字段进行区分。或者是变更数据库记录、无法通过字段确认的,那就需要一些低成本但快速的唯一校验方法,例如BloomFilter,去记录offset是否被正确处理。 实际业务中 精确一次语义 保证起来成本是很高的。我们一般是基于消费的业务逻辑 选择 最多一次(0-1) 或 至少一次 (1-n) 两者中权衡选其一。你不做任何额外动作就是 至少一次。BloomFilter校验 就是最多一次。
potatohouse 2020-05-18
  • 打赏
  • 举报
回复
[quote=引用 2 楼 LinkSe7en 的回复:] 能举例讲一下,如何避免替补的这个消费者,避免重复消费吗。是说比如在外部数据库存储已经消费的offset吗,还是kafka内部能做什么配置?
LinkSe7en 2020-05-15
  • 打赏
  • 举报
回复
所以我们最稳健的做法是 n个分区有 n+x个消费者实例去消费,然后再通过相关业务机制,控制因为挂掉、替补造成的重复消费,降低其副作用。
LinkSe7en 2020-05-15
  • 打赏
  • 举报
回复
首先,你的topic必须是多个分区的。一个分区,一个消费者组ID(consumerGroupId)只会有一个消费者实例去消费数据。 例如topic1有2个分区,cgi1有3个消费者,只有2个消费者各自消费topic1的其中一个分区,剩余1个获取不到消费权限,没有数据吐给他。 当其中一个消费者挂掉或者处理延迟超过配置阈值,此消费者会被broker视为挂掉,收回消费权限,由空闲的那个代替挂掉的消费者,从挂掉消费者最后一次提交的offset开始重新消费。 关于上述机制,自行搜索【kafka isr】In-Sync Replica机制。无论是消费者还是分区副本复制,都是遵循这个机制的。这是kafka最核心的知识点之一。
谷雨_tx 2020-05-14
  • 打赏
  • 举报
回复
当然可以,只是同一消费组下每个消费者是竞争关系,可以提升消费性能。

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧