MSK 不删除旧消息

时间:2021-02-25 15:58:52

标签: apache-kafka aws-msk

我有三个 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 正在清除 log.retention.hours=100 设置中定义的超过 100 小时的消息。

我们有更多流量通过我们的生产集群,旧消息没有被删除。 集群上仍有数十万条超过 400 小时的消息。我曾考虑添加更多配置设置,例如

segment.bytes
segment.ms

为了更快地滚动段,因为段可能尚未滚动且无法标记为删除 - 然而,尽管没有收到尽可能多的流量,但相同的配置在其他集群中运行良好。

1 个答案:

答案 0 :(得分:0)

结果证明这是生产者以美国日期格式而不是英国日期格式向 Kafka 发送消息的问题。因此,它创建的消息似乎在未来带有时间戳 - 因此不会超过 100 小时并且可以删除。

为了删除现有消息,我们设置了 log.retention.bytes,它会修剪消息而不管 log.retention.hours 设置如何。这导致 kafka 主题被修剪并删除错误消息 - 然后我们取消设置 log.retention.bytes

接下来,我们设置 log.message.timestamp.type=LogAppendTime 以确保消息标记有与文档时间相关的队列时间。这将防止生产商的错误日期在未来再次导致此问题。