我在 AWS 上部署了使用 Terraform 预配的 Bitanmi Kafka Helm 图表。我发现文档存储和持久性分配非常令人困惑。根据我从文档中理解的内容;日志是主题中的消息块,当超过可配置的字节、消息或时间配额时,日志将被刷新到存储中的文件中。
Helm 图表状态集具有以下卷:
volumeMounts:
- name: data
mountPath: {{ .Values.persistence.mountPath }}
- name: logs
mountPath: {{ .Values.logPersistence.mountPath }}
我已在 helm chart 中启用 logPersistence 来保留日志,除非我提供替代方案(我没有提供),否则它会保留在 Helm chart 提供的附加卷中。
如果 logPersistence 耗尽会发生什么?我可以配置故障保护吗,即配置 Kafka 保留所有内容并在超出配额时删除旧日志文件?如何检索持久化的日志?消费者是否会从早期偏移量请求主题消息并导致延迟或失败?如果是这样,有哪些恢复策略?
编辑
通过观察 Kafka pod 中的目录,我了解到
默认情况下,Bitnami Helm 图表将消息持久保存到映射到 /bitnami/kafka/data/ 目录的持久层
默认情况下,Kafka 服务器日志会发送到 stdout,并且可以配置为存储在映射到 /opt/bitnami/kafka/logs 的 logPersistence 中
这些目录自然会变满并可能导致崩溃。
我还不知道是否有可配置的 Kafka 设置来避免崩溃,即,如果存储接近耗尽则清除存储中的旧消息。
答案1
(如果不是,消息会被删除吗?)
如果您不提供该标志,日志将仅发送到标准输出。
如果 logPersistence 耗尽会发生什么?
我不确定你这是什么意思,你的意思是让卷超出空间吗?你可以使用logPersistence.size
,如果超出空间,你将需要重新调整卷的大小。
如果客户端从较早的偏移量请求主题消息并导致延迟或失败,是否会发生这种情况?如果是这样,有哪些恢复策略?
你能澄清一下这个问题吗?
“持久性”/数据中保存了什么?它的使用量会增加吗?如果它增加了,我可以配置故障保险吗?
如果配置了日志,主要是为了检查它是否符合您的需要,您可以尝试部署 docker-compose 并检查容器内的目录。
如果在根磁盘上保存了任何东西会怎么样?根磁盘应该有多大?它的使用率会增加吗?我可以配置故障保护吗?
你能解释一下吗?根磁盘是什么意思?
编辑:
澄清:如果日志被刷新到存储中,消费者或消费者群体可以检索它们吗?
存储日志是为了避免在 Pod 重新启动时丢失它们。要使用这些日志,您可以使用您喜欢的方法,例如,您可以使用 Logstash。
澄清:除了以下目录之外,pod 使用本地节点存储:数据 -> /bitnami/kafka 和日志 /opt/bitnami/kafka/logs
很难预测存储的大小。这取决于存储的数据量。就日志而言,Kafka 运行的时间越长,存储的数据就越多。这也可能取决于对 Kafka 代理的请求。如果目录/bitnami/data
不/opt/bitnami/kafka/logs
使用本地存储,我猜你正在使用任何其他类型的存储,你应该能够在需要时更新容量。