Kafka 最优保留和删除策略
Kafka optimal retention and deletion policy
我是 kafka 的新手,如果这个问题很简单,请原谅我。我有一个非常简单的设置用于计时测试,如下所示:
机器 A -> 写入主题 1(Broker) -> 机器 B 从主题 1 读取
机器 B -> 将刚刚读取的消息写入主题 2(Broker) -> 机器 A 从主题 2 读取
现在我在一个无限循环中发送大约 1400 字节的消息,很快就填满了我的小型代理上的 space。我正在尝试为 log.retention.ms、log.retention.bytes、log.segment.bytes 和 log.segment.delete.delay.ms 设置不同的值。首先,我将所有值设置为允许的最小值,但这似乎降低了性能,然后我将它们设置为我的代理在完全填满之前可以接受的最大值,但是当发生删除时性能再次下降。是否有设置这些值以获得绝对最小延迟的最佳实践?
感谢您的帮助!
Apache Kafka 使用日志数据结构来管理其消息。日志数据结构基本上是一组有序的段,而段是消息的集合。 Apache Kafka 在段级别而不是消息级别提供保留。因此,Kafka 不断从其末尾删除段,因为这些段违反了保留策略。
Apache Kafka 为我们提供了以下保留策略 -
- 基于时间的保留
根据此策略,我们配置了一个段(因此是消息)可以存在的最长时间。一旦一个 Segment 跨越了配置的保留时间,它就会被标记为删除或压缩,具体取决于配置的清理策略。段的默认保留时间为 7 天。
以下是您可以在 Kafka 代理属性文件中设置的参数(按优先级降序排列):
以毫秒为单位配置保留时间
log.retention.ms=1680000
在 log.retention.ms 未设置时使用
log.retention.minutes=1680
如果 log.retention.minutes 未设置则使用
log.retention.hours=168
- 基于大小的保留
在此策略中,我们为主题分区配置日志数据结构的最大大小。一旦日志大小达到此大小,它就会开始从其末尾删除段。此策略不受欢迎,因为它不能提供有关消息过期的良好可见性。然而,在由于磁盘有限space.
而需要控制日志大小的场景中,它可以派上用场。
以下是您可以在 Kafka 代理属性文件中设置的参数:
配置日志的最大大小
log.retention.bytes=104857600
所以根据您的使用情况,您应该配置 log.retention.bytes 这样您的磁盘就不会满了。
我是 kafka 的新手,如果这个问题很简单,请原谅我。我有一个非常简单的设置用于计时测试,如下所示:
机器 A -> 写入主题 1(Broker) -> 机器 B 从主题 1 读取 机器 B -> 将刚刚读取的消息写入主题 2(Broker) -> 机器 A 从主题 2 读取
现在我在一个无限循环中发送大约 1400 字节的消息,很快就填满了我的小型代理上的 space。我正在尝试为 log.retention.ms、log.retention.bytes、log.segment.bytes 和 log.segment.delete.delay.ms 设置不同的值。首先,我将所有值设置为允许的最小值,但这似乎降低了性能,然后我将它们设置为我的代理在完全填满之前可以接受的最大值,但是当发生删除时性能再次下降。是否有设置这些值以获得绝对最小延迟的最佳实践?
感谢您的帮助!
Apache Kafka 使用日志数据结构来管理其消息。日志数据结构基本上是一组有序的段,而段是消息的集合。 Apache Kafka 在段级别而不是消息级别提供保留。因此,Kafka 不断从其末尾删除段,因为这些段违反了保留策略。
Apache Kafka 为我们提供了以下保留策略 -
- 基于时间的保留
根据此策略,我们配置了一个段(因此是消息)可以存在的最长时间。一旦一个 Segment 跨越了配置的保留时间,它就会被标记为删除或压缩,具体取决于配置的清理策略。段的默认保留时间为 7 天。
以下是您可以在 Kafka 代理属性文件中设置的参数(按优先级降序排列):
以毫秒为单位配置保留时间
log.retention.ms=1680000
在 log.retention.ms 未设置时使用
log.retention.minutes=1680
如果 log.retention.minutes 未设置则使用
log.retention.hours=168
- 基于大小的保留
在此策略中,我们为主题分区配置日志数据结构的最大大小。一旦日志大小达到此大小,它就会开始从其末尾删除段。此策略不受欢迎,因为它不能提供有关消息过期的良好可见性。然而,在由于磁盘有限space.
而需要控制日志大小的场景中,它可以派上用场。以下是您可以在 Kafka 代理属性文件中设置的参数:
配置日志的最大大小
log.retention.bytes=104857600
所以根据您的使用情况,您应该配置 log.retention.bytes 这样您的磁盘就不会满了。