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

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

自定义 MSK 配置

您可以使用 Amazon MSK 创建自定义 MSK 配置,在其中设置以下属性。未显式设置的属性将获得其在 Amazon 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.differce.max 代理收到消息时的时间戳与消息中指定的时间戳之间的最大时间差。如果 log.message.timestamp.type=CreateTime,则如果时间戳的差异超过此阈值,则消息将被拒绝。如果 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

当生产者将 ack 设置为"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
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

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

MinValue = 6000

MaxValue(包括)= 18000

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

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

动态配置

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

注意

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

主题级配置

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

配置状态

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

  • ACTIVE

  • DELETING

  • DELETE_FAILED