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

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

自定义 MSK 配置

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

Apache Kafka 配置属性
名称 描述
allow.everyone.if.no.acl.found 如果你想将这个属性设置为false,首先确保为集群定义 Apache Kafka ACL。如果你将这个属性设置为false而且你没有先定义 Apache Kafka ACL,你就会失去对集群的访问权限。如果发生这种情况,你可以再次更新配置并将此属性设置为true以重新获得对集群的访问权限。
auto.create.topics.enable 在服务器上启用主题自动创建。
compression.type 给定主题的最终压缩类型。可以将此属性设置为标准压缩编解码器(gzipsnappylz4zstd)。它还接受uncompressed。此值等同于不压缩。如果你将值设置为producer,这意味着保留制作者设置的原始压缩编解码器。

connections.max.idle.ms

空闲连接超时(以毫秒为单位)。服务器套接字处理器线程会关闭空闲时间超过您为此属性设置的值的连接。
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 之间。该值决定了日志压缩器尝试清理日志的频率(如果启用了日志压缩)。默认情况下,如果压缩了超过 50% 的日志,Apache Kafka 会避免清理日志。该比率限制了日志在重复项中浪费的最大空间(为 50%,这意味着至多 50% 的日志可能是重复的)。更高的比率意味着更少、更有效的清理,但会浪费更多的日志空间。

log.cleanup.policy 超出保留时段的分段的默认清除策略。有效策略的逗号分隔列表。有效策略为 deletecompact
log.flush.interval.messages 在将消息刷新到磁盘之前在日志分区上累积的消息数量。
log.flush.interval.ms 任何主题中的消息在刷新到磁盘之前在内存中保留的最长时间(以毫秒为单位)。如果你没有设置这个值,则使用 log.flush.scheduler.interval.ms 中的值。最小值为 0。
log.message.timestamp.diference.ma 代理收到消息时的时间戳与消息中指定的时间戳之间的最大时差。如果 log.message.timestamp.tyCreateTime,如果时间戳的差异超过此阈值,则消息将被拒绝。如果 log.message.timestamp.type= 则忽略此配置LogAppendTime。
log.message.timestamp. 指定消息中的时间戳是消息创建时间还是日志追加时间。允许的值是 CreateTimeLogAppendTime
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 配置为每个主题设置此值。

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.partitions 每个主题的默认日志分区数。
num.recovery.threads.per.data.dir 每个数据目录的线程数,用于在启动时恢复日志和在关闭时刷新日志。
num.replica.fetchers 用于从源代理复制消息的提取器线程数。如果增加此值,则可以增加关注者代理中的 I/O 并行程度。
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

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

阿帕奇ZooKeeper会话超时(以毫秒为单位)。

MinValue= 6000

MaxValue(含)= 18000

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

当您使用自定义 MSK 配置更新现有 MSK 集群时,Amazon MSK 会在必要时进行滚动重启,并使用最佳实践最大限度地减少客户停机时间。例如,在 Amazon MSK 重新启动每个代理后,Amazon MSK 会尝试让代理在配置更新期间赶上代理可能错过的数据,然后再移至下一个代理。

动态配置

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

注意

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

主题级配置

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

配置状态

亚马逊 MSK 配置可以处于以下状态之一。要对配置执行操作,该配置必须位于ACTIVE要么DELETE_FAILED州:

  • ACTIVE

  • DELETING

  • DELETE_FAILED