我有一个Kafka消费者项目,它使用来自特定Kafka主题的数据。 90%的记录在我得到它们后立即处理,但我有延迟处理一些记录(10%)。
这些记录需要延迟,我无法提交记录,因此可能导致Kafka将分区重新分配给新节点。为了避免这种情况,我可以读取相同的主题两次,并在第二个消费者中延迟获取数据部分,但它需要反序列化两次,因此需要一个开销。
是否有可能使用单个消费者读取记录但是与Kafka消费者有两个单独的提交?它基本上类似于在提交方面拥有两个不同的消费者,consumer.poll
将从单个消费者调用,但每个批次将有两个consumer.commitSync
。我会帮助我避免额外的反序列化以及网络成本。
答案 0 :(得分:0)
下面提到的是你可以做的事情来实现上述任务。
创建一个包含两个主题(T1,T2)的管道,在主题T1中推送所有消息(90%),并在主题T2中将所有消息保留10%。
让您的Kafka消费者可配置,即只要您启动消费者,就可以轻松传递轮询间隔,batchSize和批量超时。
通过这种方式,您将保持主题清洁。每次需要处理消息时,您可以通过仅设置管道一次轻松完成。