我在应用程序中使用org.apache.kafka.clients.consumer.KafkaConsumer
处理来自Kafka的消息。我在我的应用程序中注意到以下行为。如果我杀死我的应用程序,然后再次重新启动它,则当我再次启动该应用程序时,kafka使用者不会在此时间间隔内收到任何由kafka生产者发送的消息。这是我在应用程序中配置kafka使用者的方法
val props = Map[String, Object](
ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG -> EnvironmentConfig.getKafkaBootStrapServers,
ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG -> classOf[StringDeserializer],
ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG -> classOf[StringDeserializer],
ConsumerConfig.AUTO_OFFSET_RESET_CONFIG -> "latest",
ConsumerConfig.GROUP_ID_CONFIG -> "myGrouop",
ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG -> (false: java.lang.Boolean))
// Create the consumer using props.
val consumer = new KafkaConsumer[String, String](props)
我的配置中缺少什么?请帮忙!
答案 0 :(得分:1)
重新启动使用者后,它将尝试从上次提交的偏移量重新启动。如果未找到,默认情况下将从末尾重新启动。
我看到您已禁用自动提交(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG -> (false: java.lang.Boolean))
)。在这种情况下,您是否手动提交偏移量?
如果不是,则说明您的使用者为何从头开始重新启动。它以前没有提交任何偏移量,因此默认为latest
。
首先,我建议您保持启用自动提交功能。一旦弄清楚了它是如何工作的,然后可以根据需要手动查看偏移量。