使用SCS

时间:2018-06-16 08:28:31

标签: apache-kafka spring-cloud-stream

使用kafka和spring cloud stream的新手。需要一些帮助。

设置

  • 我有两个弹簧启动应用程序 App-1,App-2
  • 我使用 spring cloud stream spring-cloud-stream-binder-kafka 进行异步通信。
  • 有一个主题 TOPIC-1

<小时/> 使用案例

  • 假设App-1在App-2正在收听的主题TOPIC-1上发送了一条消息。
  • App-2使用了该消息并成功处理了该消息。
  • 现在该主题的偏移量增加了。

问题

  • 如何在指定的时间段后实现从kafka日志中删除唯一成功使用的消息数据的机制?

在卡夫卡,消费者的责任是消费者的责任。所以我想,在 spring cloud stream kafka 中必须有一些我不知道的kafka消息日志控制机制。

注意1:我知道kafka日志保留时间和磁盘属性。但即使是非消费消息,kafka日志也会被删除。

注2:我已经完成了this question,但它无能为力。

1 个答案:

答案 0 :(得分:1)

在卡夫卡,我没有这样的机制;当然不是在Spring Cloud Stream或它所基于的库中。 Kafka的客户无法访问这种低级构造。

此外,消费者抵消与主题日志完全分开;在现代经纪人中,它们存储在一个特殊主题中。

修改

根据以下评论,可以使用kafka-delete-records.sh命令行工具。

请注意,这使用scala AdminClient,默认情况下不在SCSt类路径上(自2.0起)。

但是,java AdminClient支持类似的功能:

/**
 * Delete records whose offset is smaller than the given offset of the corresponding partition.
 *
 * This is a convenience method for {@link #deleteRecords(Map, DeleteRecordsOptions)} with default options.
 * See the overload for more details.
 *
 * This operation is supported by brokers with version 0.11.0.0 or higher.
 *
 * @param recordsToDelete       The topic partitions and related offsets from which records deletion starts.
 * @return                      The DeleteRecordsResult.
 */
public DeleteRecordsResult deleteRecords(Map<TopicPartition, RecordsToDelete> recordsToDelete) {
    return deleteRecords(recordsToDelete, new DeleteRecordsOptions());
}

您可以使用启动AdminClient AutoConfiguration创建KafkaAdmin

AdminClient client = AdminClient.create(kafkaAdmin.getConfig());