在实施手动偏移管理时,我遇到了以下问题:(使用0.9)
为了手动管理偏移量,对于每个消耗的记录,我检索记录的当前偏移量并提交新的偏移量(currentOffset + 1,因为偏移重置策略是"最新的")。
创建新的使用者组时,它没有明确的偏移量(偏移量为"未知"),因此,如果它在停止之前没有使用来自所有现有分区的消息,则将仅为部分分区(消费者从中获取消息的分区)提交偏移量,而其余分区的偏移量仍为“未知”#34;。
当再次启动使用者时,它只获得一些在它关闭时生成的消息(只有来自具有已提交偏移量的分区中的消息),来自分区的消息具有"未知&#34 ;由于偏移重置策略,偏移量将丢失并且永远不会消耗。
由于在我的情况下,一旦创建了一个使用者组,它就会错过任何消息是不可接受的,所以我希望在开始使用之前为每个分区显式提交一个偏移量。
为此,我找到了两个选择:
两者都比我期望的更复杂和嘈杂(我期望使用更简单的API来获取分配给消费者的所有分区的日志结束位置。)
任何有关更好实施的想法或想法都将受到赞赏。
10倍。
答案 0 :(得分:0)
使用消费者API完全取决于你在哪里提交抵消。
列表与LT; KafkaStream< byte [],byte []> >流 = consumer.createMessageStreamsByFilter(new Whitelist(topicRegex),1)