如何自动删除未使用的kafka用户

时间:2019-07-15 17:45:13

标签: apache-kafka kafka-consumer-api

我正在将Kafka用于消息传递应用程序。对于此应用程序,有一个生产者将消息放入一个主题中,而消费者将其注册到该主题中并使用这些消息。这些使用者是Dockerized应用程序。出于自动缩放的目的,每个使用者在创建后都会被注册为具有唯一ID的使用者。

假定以下情况:

Consumer1被创建为docker容器,并将其自身注册为ID为Consumer1的使用者。

Consumer2被创建为docker容器,并将其自身注册为ID为Consumer2的使用者。

现在,无论出于何种原因,Consumer1都会失败,并被Consumer3取代,Consumer3将自己注册为ID为Consumer1的kafka的使用者。

问题是,[DllImport("InjectDll.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] private static extern ulong FindProgramProcessId(string procName); [DllImport("InjectDll.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] private static extern bool InjectIntoProcess(ulong procId, string Dll); string ProcName = "random_test_game.exe"; string DllPath = @"C:\ProgramData\Hack\File.dll"; ulong procId = FindProgramProcessId(ProcName); bool Injected = InjectIntoProcess(procId, DllPath); 已不再使用。从长远来看,将会有多个未使用的消费者。

是否可以动态自动地知道哪些使用者不再使用并删除它们?

2 个答案:

答案 0 :(得分:0)

如果消费者1和消费者3属于同一消费者组,那么消费者3将开始从消费者1停止的地方读取消息。这是因为Kafka维护特定于消费者组的偏移量。因此,如果在具有相同消费者组的消费者中有一个失败,则其他消费者将使用偏移量并避免重新处理数据。

Kafka经纪人不会像您在问题中所假定的那样维护失败的使用者的日志。

答案 1 :(得分:-1)

您不必。 Kafka基于offset.retention.minutes设置为您完成此设置,该设置控制在特定消费者组的所有消费者退出后,偏移量保持多长时间。并且,根据Kafka documentation

  

事实上,唯一基于每个消费者保留的元数据是   该使用者在日志中的偏移量或位置。该偏移量是   由消费者控制...

     

...   这些功能的组合意味着Kafka的消费者来回便宜,对集群或其他方面没有太大影响   消费者。