自定义 MSK 配置 - Amazon Managed Streaming for Apache Kafka
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

自定义 MSK 配置

Amazon MSK 允许您创建自定义 MSK 配置,可以在该配置中设置以下属性。未显式设置的属性将获得其在 默认 Amazon MSK 配置 中具有的值。有关配置属性的更多信息,请参阅 Apache Kafka 配置

可设置的 Apache Kafka 配置属性
名称 描述
auto.create.topics.enable 在服务器上启用主题自动创建。
compression.type 给定主题的最终压缩类型。可以将此属性设置为标准压缩编解码器(gzipsnappylz4zstd)。此外,它还接受 uncompressedproducer,前者相当于没有压缩,后者意味着保留由创建器设置的原始压缩编解码器。
default.replication.factor 自动创建的主题的默认复制因子。
delete.topic.enable 启用删除主题操作。如果此配置已被禁用,则无法通过管理工具删除主题。
group.initial.rebalance.delay.ms 在执行第一次重新平衡之前,组协调器等待更多使用器加入新组的时间。更长的延迟时间意味着重新平衡可能会更少,但会增加处理开始之前的时间。
group.max.session.timeout.ms 注册使用器的最长会话超时时间。超时时间越长,可供使用器用来处理检测信号之间的消息的时间就越多,但这会导致需要花费更多时间来检测故障。
group.min.session.timeout.ms 注册使用器的最短会话超时时间。超时时间越短,故障检测的速度就会越快,但需要更频繁的使用器检测信号,这会耗尽代理资源。
leader.imbalance.per.broker.percentage 各代理允许的领导节点不平衡比率。如果各代理上超过了此值,则控制器将触发领导节点平衡操作。此值以百分比的形式指定。
log.cleaner.delete.retention.ms 您希望 Apache Kafka 保留已删除的记录的时间量。最小值为 0。
log.cleaner.min.cleanable.ratio

此配置属性可以具有介于 0 和 1 之间的值。它确定日志压缩程序尝试清除日志的频率(假设启用了日志压缩)。默认情况下,Apache Kafka 避免在压缩了 50% 以上的日志时清除日志。此比率将日志中的最大空间限制为重复项(50%,这意味着最多 50% 的日志可能是重复项)。更高的比率意味着减少、更有效的清除,但会浪费日志中的更多空间。

log.cleanup.policy 超出保留时段的分段的默认清除策略。有效策略的逗号分隔列表。有效策略为 deletecompact
log.flush.interval.messages 将消息刷新到磁盘之前,日志分区上累积的消息的数量。
log.flush.interval.ms 任何主题中的消息在刷新到磁盘之前保存在内存中的最长时间(以毫秒为单位)。如果未设置,则使用 log.flush.scheduler.interval.ms 中的值。最小值为 0。
log.retention.bytes 删除日志前的最大日志大小。
log.retention.hours 删除日志文件前保留日志文件的小时数,它是 log.retention.ms 属性的三级属性。
log.retention.minutes 删除日志文件前保留日志文件的分钟数,它是 log.retention.ms 属性的二级属性。如果未设置,则使用 log.retention.hours 中的值。
log.retention.ms 删除日志文件前保留日志文件的毫秒数(以毫秒为单位)。如果未设置,则使用 log.retention.minutes 中的值。
log.roll.ms 推出新日志段之前的最长时间(以毫秒为单位)。如果未设置该属性,则使用 log.roll.hours 中的值。此属性的最小值为 1。
log.segment.bytes 单个日志文件的最大大小。
max.incremental.fetch.session.cache.slots 维护的增量提取会话的最大数量。
message.max.bytes

Kafka 允许的最大记录批处理大小。如果增加此数量,并且存在大于 0.10.2 的使用器,则使用器的提取大小也必须增加,以便它们能够提取如此大的记录批处理。

在最新的消息格式版本中,总是将记录分组到批处理中来提高效率。在以前的消息格式版本中,未压缩的记录不会分组到批处理中,在此情况下,此限制仅适用于单条记录。

可使用主题级别 max.message.bytes 配置为每个主题进行此设置。

log.message.timestamp.difference.max.ms 代理收到消息时的时间戳与消息中指定的时间戳之间允许的最大差异。如果 log.message.timestamp.type=CreateTime,则时间戳中的差值超过此阈值,将拒绝消息。如果 log.message.timestamp.type=LogAppendTime,则忽略此配置。
log.message.timestamp.type 指定消息中的时间戳是消息创建时间还是日志追加时间。允许的值是 CreateTimeLogAppendTime
min.insync.replicas

当创建器将 acks 设置为 "all"(或 "-1")时,min.insync.replicas 指定为使写入被视为成功而必须确认写入的最小副本数。如果无法达到此最小值,创建者将引发异常(NotEnoughReplicas 或 NotEnoughReplicasAfterAppend)。

通过将 min.insync.replicas 和 acks 结合使用,您可以增强耐用性保证。一个典型的场景是,创建一个重复因子为 3 的主题,将 min.insync.replicas 设置为 2,并在 acks 为 "all" 的情况下生成。 这可确保在大多数副本未收到写入时,创建器将引发异常。

num.io.threads 服务器用于处理请求的线程的数目,其中可能包括磁盘 I/O。
num.network.threads 服务器用于接收来自网络的请求并向其发送响应的线程的数目。
num.recovery.threads.per.data.dir 在启动时用于日志恢复以及在关闭时用于刷新的每个数据目录的线程数。
num.replica.fetchers 用于从源代理复制消息的提取器线程数。增大此值会增加跟踪器代理中的 I/O 并行度。
num.partitions 每个主题的默认日志分区数。
offsets.retention.minutes 当一个使用器组丢失其所有使用器(即变空)后,其偏移量将在此保留期内保留,然后被丢弃。对于独立使用器(即,使用手动分配),偏移量会在最后一次提交时间加上此保留期后过期。
offsets.topic.replication.factor 偏移量主题的复制因子(设置为较高的值可确保可用性)。内部主题创建失败,直到集群大小满足此复制因子要求。
replica.fetch.max.bytes 尝试为每个分区提取的消息的字节数。这不是绝对最大值。如果提取的第一个非空分区中的第一个记录批处理大于此值,则将返回该记录批处理以确保可以取得进展。代理接受的最大记录批处理大小通过 message.max.bytes(代理配置)或 max.message.bytes(主题配置)进行定义。
replica.fetch.response.max.bytes 整个提取响应预期的最大字节数。记录是分批提取的,如果提取的第一个非空分区中的第一个记录批处理大于此值,则将返回该记录批处理以确保可以取得进展。这不是绝对最大值。message.max.bytes(代理配置)或 max.message.bytes(主题配置)属性指定代理接受的最大记录批处理大小。
replica.lag.time.max.ms 如果跟踪器没有发送任何提取请求,或者至少在此毫秒数内没有使用到领导的日志结束偏移量,则领导会从 ISR 中删除追随者。

MinValue:10000

MaxValue(含)= 30000

socket.receive.buffer.bytes 套接字服务器套接字的 SO_RCVBUF 缓冲区。可将此属性设置为的最小值为 -1。如果值为 -1,则 Amazon MSK 使用操作系统默认值。
socket.request.max.bytes 套接字请求中的最大字节数。
socket.send.buffer.bytes 套接字服务器套接字的 SO_SNNDBUF 缓冲区。可将此属性设置为的最小值为 -1。如果值为 -1,则 Amazon MSK 使用操作系统默认值。
replica.selector.class 实施 ReplicaSelector 的完全限定类名称。 代理使用此名称来查找首选只读副本。如果您使用的是 Apache Kafka 版本 2.4.1 或更高版本,并且希望允许使用者从最近的副本提取,请将此属性设置为 org.apache.kafka.common.replica.RackAwareReplicaSelector。 有关更多信息,请参阅Apache Kafka 版本 2.4.1 (改用 2reference)
replica.socket.receive.buffer.bytes 网络请求的套接字接收缓冲区。
transactional.id.expiration.ms 事务协调器在不接收当前事务的任何事务状态更新的情况下在其事务 ID 过期之前等待的时间(以毫秒为单位)。此设置还会影响创建者 ID 过期:在上次使用给定创建者 ID 进行写入后,创建者 IDs 将过期。如果由于主题的保留设置而删除了创建者 ID 中的上次写入,创建者 IDs 可能会很快过期。此属性的最小值为 1 毫秒。
transaction.max.timeout.ms 事务的最大超时时间。如果客户端请求的事务时间超过此值,则代理将在 InitProducerIdRequest 中返回错误。 这可防止客户端的超时时间过长,此情况会导致使用者无法阅读事务中包含的主题。
transaction.state.log.min.isr 覆盖事务主题的 min.insync.replicas 配置。
transaction.state.log.replication.factor 事务主题的复制因子。将它设置为较高的值可提高可用性。内部主题创建失败,直到集群大小满足此复制因子要求。
unclean.leader.election.enable 指示是否允许选择不在 ISR 集中的副本作为领导(作为最后的手段),即使这样做可能导致数据丢失。
zookeeper.connection.timeout.ms 客户端等待与 ZooKeeper 建立连接的最长时间。 如果未设置,则使用 zookeeper.session.timeout.ms 中的值。
zookeeper.session.timeout.ms

Apache ZooKeeper 会话超时(以毫秒为单位)。

MinValue = 6000

MaxValue(含)= 18000

要了解如何创建自定义 MSK 配置、列出所有配置或描述它们,请参阅 Amazon MSK 配置操作。要使用自定义 MSK 配置创建 MSK 集群或使用新的自定义配置更新集群,请参阅 Amazon MSK:工作方式

当您使用自定义 MSK 配置更新现有 MSK 集群 时,Amazon MSK 会在必要时使用最佳实践来重新开始滚动以最大程度地减少客户停机时间。例如,在 Amazon MSK 重新启动每个代理后,它会尝试让代理获得其在配置更新期间可能丢失的数据,然后再移至下一个代理。

动态配置

除了 Amazon MSK 提供的配置属性之外,您还可以动态设置不要求代理重新启动的集群级别和代理级别的配置属性。您可以动态设置在 Apache Kafka 文档中的代理配置下的表中未标记为只读的配置属性。有关动态配置和示例命令的信息,请参阅 Apache Kafka 文档中的更新代理配置

注意

您可以设置 advertised.listeners 属性,但不能设置 listeners 属性。

主题级别的配置

您可以使用 Apache Kafka 命令为新主题和现有主题设置或修改主题级别的配置属性。有关主题级别的配置属性以及如何使用这些属性的示例的更多信息,请参阅 Apache Kafka 文档中的主题级别的配置

配置状态

Amazon MSK 配置可以处于以下状态。要对配置执行操作,配置必须处于 ACTIVEDELETE_FAILED 状态:

  • ACTIVE

  • DELETING

  • DELETE_FAILED