MSK 不删除旧消息
MSK Not Deleting Old Messages
我有三个 MSK 集群;开发、非生产和生产。它们都有以下集群配置——没有主题级别的配置。
auto.create.topics.enable=false
default.replication.factor=3
min.insync.replicas=2
num.io.threads=8
num.network.threads=5
num.partitions=1
num.replica.fetchers=2
log.retention.hours=100
replica.lag.time.max.ms=30000
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
socket.send.buffer.bytes=102400
unclean.leader.election.enable=true
zookeeper.session.timeout.ms=18000
Dev 和 Nonprod 正在清除超过 100 小时的消息,如 log.retention.hours=100
设置中所定义。
我们的生产集群有更多的流量,旧消息没有被删除。 集群上仍有数十万条超过 400 小时的消息。我考虑过添加更多配置设置,例如
segment.bytes
segment.ms
更快地滚动分段,因为分段可能尚未滚动并且无法标记为删除 - 但是,同样的配置在其他集群中运行良好,尽管没有收到那么多的流量。
所以这证明是生产者以美国日期格式而不是英国日期格式向 Kafka 发送消息的问题。因此,它创建的消息在未来似乎带有时间戳 - 因此不超过 100 小时并且符合删除条件。
为了删除现有消息,我们设置了 log.retention.bytes
,无论 log.retention.hours
设置如何,它都会删除消息。这导致 kafka 主题被修剪并删除错误消息 - 然后我们取消设置 log.retention.bytes
.
接下来我们设置 log.message.timestamp.type=LogAppendTime
以确保消息标记有与文档时间相对的排队时间。这将防止生产者的错误日期在未来再次导致此问题。
我有三个 MSK 集群;开发、非生产和生产。它们都有以下集群配置——没有主题级别的配置。
auto.create.topics.enable=false
default.replication.factor=3
min.insync.replicas=2
num.io.threads=8
num.network.threads=5
num.partitions=1
num.replica.fetchers=2
log.retention.hours=100
replica.lag.time.max.ms=30000
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
socket.send.buffer.bytes=102400
unclean.leader.election.enable=true
zookeeper.session.timeout.ms=18000
Dev 和 Nonprod 正在清除超过 100 小时的消息,如 log.retention.hours=100
设置中所定义。
我们的生产集群有更多的流量,旧消息没有被删除。 集群上仍有数十万条超过 400 小时的消息。我考虑过添加更多配置设置,例如
segment.bytes
segment.ms
更快地滚动分段,因为分段可能尚未滚动并且无法标记为删除 - 但是,同样的配置在其他集群中运行良好,尽管没有收到那么多的流量。
所以这证明是生产者以美国日期格式而不是英国日期格式向 Kafka 发送消息的问题。因此,它创建的消息在未来似乎带有时间戳 - 因此不超过 100 小时并且符合删除条件。
为了删除现有消息,我们设置了 log.retention.bytes
,无论 log.retention.hours
设置如何,它都会删除消息。这导致 kafka 主题被修剪并删除错误消息 - 然后我们取消设置 log.retention.bytes
.
接下来我们设置 log.message.timestamp.type=LogAppendTime
以确保消息标记有与文档时间相对的排队时间。这将防止生产者的错误日期在未来再次导致此问题。