Kafka 的内存缓冲区

打印 上一主题 下一主题

主题 1779|帖子 1779|积分 5337

内存缓冲区相干设置

Kafka 的内存缓冲区相干设置主要通过服务器端设置文件和客户端设置来调解,下面是两项你提到的关键设置以及如何确认的方法:

1. message.max.bytes



  • 作用:

    • 指定 Kafka broker 可以继承的单条消息的最大大小(单元:字节)。
    • 消息大小超过该限定时,broker 会拒绝吸收该消息。

  • 默认值:

    • 1 MB (1048576 字节)

  • 设置方式:

    • 在 server.properties 文件中设置:
      1. message.max.bytes=1048576
      复制代码

  • 如何确认:

    • 通过设置文件查看:
      登录到 Kafka broker 的服务器,查看 server.properties 文件中的 message.max.bytes 设置。
    • 通过 Kafka Admin 工具:
      使用 Kafka 提供的工具来验证 broker 设置:
      1. kafka-configs.sh --bootstrap-server <broker_address> --entity-type brokers --describe
      复制代码
    • 通过 JMX 或 Prometheus 监控:
      在 JMX 或 Prometheus 设置中,可以找到 message.max.bytes 的相干暴露指标。


2. log.segment.bytes



  • 作用:

    • 控制 Kafka 日记段文件的最大大小(单元:字节)。
    • 当日记段文件大小达到该值时,会创建新的日记段文件。
    • 较小的值会导致更频仍的日记段切分,较大的值则会减少切分,但大概增加恢复时间。

  • 默认值:

    • 1 GB (1073741824 字节)

  • 设置方式:

    • 在 server.properties 文件中设置:
      1. log.segment.bytes=1073741824
      复制代码

  • 如何确认:

    • 通过设置文件查看:
      同样登录到 Kafka broker 的服务器,查看 server.properties 文件中的 log.segment.bytes 设置。
    • 通过 Kafka Admin 工具:
      对于每个 topic,还可以检查是否有覆盖的设置:
      1. kafka-configs.sh --bootstrap-server <broker_address> --entity-type topics --entity-name <topic_name> --describe
      复制代码
    • 检查实际日记段大小:
      在 Kafka 的日记目次中(由 log.dirs 指定),检查日记段文件的大小是否靠近 log.segment.bytes 的设置值。


其他相干设置


  • max.request.size(客户端设置)

    • 定义 Kafka producer 可以发送的最大请求大小。
    • 默认值:1 MB (1048576 字节)

  • log.retention.bytes

    • 指定 Kafka 生存的日记数据的最大总大小。
    • 如果达到此限定,旧的日记段文件会被删除。

  • log.dirs

    • 定义 Kafka 的日记存储目次,可以用于直接查看文件大小和日记分布情况。


排查与优化发起



  • 验证 Producer 和 Broker 设置是否一致:

    • max.request.size(客户端)需小于即是 message.max.bytes(Broker)。
    • 否则,Producer 大概发送过大的消息导致失败。

  • 设置合理的 log.segment.bytes:

    • 小型文件(如 128 MB)得当于频仍更新的体系。
    • 大型文件(如 1 GB 或更高)得当于批量处置惩罚体系,但需要更强的磁盘性能。

默认值

在 Kafka 中,如果设置文件中没有显式设置某个参数值(例如 message.max.bytes 和 log.segment.bytes),Kafka 将使用默认值。以下是默认值及如何确认实例的当前运行值的详细说明:

1. 缺省值(模仿值)



  • message.max.bytes:

    • 默认值:1048576(1 MB)
    • 作用范围:每个 broker 或 topic。

  • log.segment.bytes:

    • 默认值:1073741824(1 GB)
    • 作用范围:每个 broker 或 topic。


2. 如何确认实例当前运行值

可以通过以下几种方法确认 Kafka 当前运行值:

方法 1:检查 Kafka 设置文件


  • 登录 Kafka broker 地点的机器。
  • 查看 broker 设置文件(通常为 /opt/kafka/config/server.properties 或 /tmp/strimzi.properties)。

    • 命令:
      1. grep message.max.bytes /path/to/config/file
      2. grep log.segment.bytes /path/to/config/file
      复制代码

  • 如果未设置,则说明使用默认值。

方法 2:使用 Kafka Admin 工具

Kafka 提供的管理工具可用于查询运行时设置。


  • 查询 broker 全局设置:
    1. kafka-configs.sh --bootstrap-server <broker_address> --entity-type brokers --describe
    复制代码
    输出示例:
    1. Configs for broker 1 are message.max.bytes=1048576
    2. , log.segment.bytes=1073741824
    复制代码
  • 查询特定 topic 设置(若某个 topic 覆盖了全局值):
    1. kafka-configs.sh --bootstrap-server <broker_address> --entity-type topics --entity-name <topic_name> --describe
    复制代码
    输出示例:
    1. Configs for topic 'my-topic' are message.max.bytes=2097152, log.segment.bytes=524288000
    复制代码

方法 3:通过 JMX 或 Prometheus 指标

Kafka 运行时会暴露 JMX 或 Prometheus 指标,可以查看实际使用的值。


  • 使用 JMX 工具(如 JConsole)连接到 Kafka 进程。

    • 查找路径:
      1. kafka.server<type=BrokerTopicMetrics, name=MessageMaxBytes>
      2. kafka.server<type=Log, name=LogSegmentBytes>
      复制代码

  • 如果 Kafka 已集成 Prometheus,检查导出的监控指标。

方法 4:直接模仿验证

如果难以确认设置,也可以通过发送消息测试 message.max.bytes 或查看日记文件大小测试 log.segment.bytes:

  • 验证 message.max.bytes:

    • 使用 Kafka producer 发送一条大于 1 MB 的消息。
    • 如果未调解设置,broker 会返回 MessageSizeTooLargeException。

  • 验证 log.segment.bytes:

    • 检查 Kafka 数据目次(由 log.dirs 指定)。
    • 找到 topic 的日记段文件,查看其文件大小:
      1. ls -lh /path/to/kafka/logs/<topic_name>-*
      复制代码
    • 如果文件大小靠近 1 GB 并天生了新日记段,则默认值为 1 GB。


发起


  • 如果是生产环境,发起显式设置这些关键设置项。
  • 在进行测试或排查问题时,实验小规模调解参数并观察运行效果。
有需要进一步的设置指导或工具使用方法,可以随时沟通!
Dynamic configs

如果实验了 kafka-configs.sh --bootstrap-server <broker_address> --entity-type brokers --describe
,但没有体现任何动态设置(Dynamic configs for broker X are:),这表明 没有对这些 brokers 设置任何动态覆盖设置,而且这些 brokers 应该正在使用其默认值大概 server.properties 文件中设置的值。

如何确认当前生效值?

1. 检查 Broker 设置文件

如果动态设置为空,Kafka 会依赖 server.properties 文件中定义的静态设置。


  • 登录每个 Kafka broker 的服务器,检查 server.properties 文件:
    1. grep message.max.bytes /opt/kafka/config/server.properties
    2. grep log.segment.bytes /opt/kafka/config/server.properties
    复制代码
  • 如果文件中没有这些键值,则使用默认值。

2. 使用 Broker JMX 或 Prometheus 查询

如果已启用了 JMX 或 Prometheus,可通过监控体系查询 broker 的生效值。


  • JMX
    使用 JConsole 或类似工具,连接到 Kafka broker 的 JMX 端口。

    • 相干 MBean 路径:
      1. kafka.server<type=BrokerTopicMetrics, name=MessageMaxBytes>
      2. kafka.server<type=Log, name=LogSegmentBytes>
      复制代码

  • Prometheus
    如果 Kafka 集成了 Prometheus,相干的指标会被暴露出来,可通过查询 Prometheus 数据库或 Grafana 查看详细值。

3. 直接测试和推断

如果设置文件和动态设置都未能确认,可以通过以下测试推断生效值:

  • 测试 message.max.bytes

    • 使用 Kafka producer 发送消息:

      • 小于 1 MB:应成功。
      • 大于 1 MB:如果报错 MessageSizeTooLargeException,则说明默认值为 1048576。

    • 示例命令:
      1. kafka-producer-perf-test.sh --topic test-topic --record-size 1048577 --num-records 1 --throughput -1 --producer.config <config_file>
      复制代码

  • 测试 log.segment.bytes

    • 检查 Kafka 数据目次(log.dirs 参数指定的路径)。
    • 观察日记段文件的大小:
      1. ls -lh /path/to/logs/<topic_name>-*
      复制代码
    • 如果每段日记大小靠近 1 GB,则默认值为 1073741824。


4. 使用 kafka-topics.sh 检查特定 topic 设置

如果 topic 设置覆盖了 broker 默认值,可以通过以下命令查看:
  1. kafka-topics.sh --bootstrap-server <broker_address> --topic <topic_name> --describe
复制代码


  • 输出示例:
    1. Topic: test-topic  PartitionCount: 3  ReplicationFactor: 2  Configs: message.max.bytes=2097152
    复制代码


增补发起



  • 确认 server.properties 和动态设置均为空后,可以假定运行的是默认值。
  • 如果需要进一步确认动态设置是否未生效,实验重启 Kafka broker 或检查是否有设置管理工具(如 Strimzi)覆盖设置。
如果还需要协助,可以提供更多运行环境细节!
JMX

JMX(Java Management Extensions)提供了一种用于监控和管理 Kafka 进程的方法。通过 JMX 工具(如 JConsole),可以获取 Kafka 的运行时指标,包括内存使用、GC 信息、线程状态,以及 Kafka 的 broker、topic、consumer、producer 等相干的指标。
以下是通过 JConsole 连接到 Kafka 进程的步骤和常见操作说明:

1. 确保 Kafka 启用了 JMX

Kafka 通过 JVM 的 -Dcom.sun.management.jmxremote 参数启用 JMX。
检查 Kafka 进程是否启用了 JMX:

在 Kafka 的启动命令中,确认是否有类似以下参数:
  1. -Dcom.sun.management.jmxremote
  2. -Dcom.sun.management.jmxremote.port=<JMX_PORT>
  3. -Dcom.sun.management.jmxremote.authenticate=false
  4. -Dcom.sun.management.jmxremote.ssl=false
复制代码
修改 Kafka 设置文件以启用 JMX:

在 Kafka 的启动脚本中(例如 /opt/kafka/bin/kafka-server-start.sh),设置以下环境变量:
  1. export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true \
  2. -Dcom.sun.management.jmxremote.port=9999 \
  3. -Dcom.sun.management.jmxremote.authenticate=false \
  4. -Dcom.sun.management.jmxremote.ssl=false"
复制代码


  • jmxremote.port:指定 Kafka 监听的 JMX 端口(如 9999)。
  • jmxremote.authenticate=false:禁用身份验证(仅发起在开辟或受信托的环境中)。
  • jmxremote.ssl=false:禁用 SSL。
重启 Kafka 生效。

2. 使用 JConsole 连接到 Kafka

启动 JConsole:


  • 在安装了 JDK 的环境中,运行以下命令启动 JConsole:
    1. jconsole
    复制代码
  • 出现 JConsole 界面后,选择远程进程
连接到 Kafka 的 JMX 端口:


  • 输入 Kafka 主机和 JMX 端标语,例如:
    1. <kafka_host>:9999
    复制代码
  • 点击“连接”,等候连接建立。

3. 常见监控指标

在 JConsole 中,进入 MBeans 面板,可以查看以下 Kafka 相干指标:
Broker Metrics



  • kafka.server:type=BrokerTopicMetrics

    • MessagesInPerSec:每秒吸收的消息数。
    • BytesInPerSec:每秒吸收的字节数。
    • BytesOutPerSec:每秒发送的字节数。

Topic Metrics



  • kafka.log:type=Log

    • LogEndOffset:日记的最新偏移量。
    • LogSegmentBytes:当前日记段的大小。

Consumer Metrics



  • kafka.consumer:type=ConsumerFetcherManagerMetrics

    • FetchSizeAvg:消耗者获取的平均消息大小。
    • FetchRate:消耗者每秒获取消息的速率。

Producer Metrics



  • kafka.producer:type=ProducerTopicMetrics

    • BatchSizeAvg:生产者消息批量大小的平均值。
    • CompressionRate:压缩比。

体系级别指标



  • Heap Memory Usage:JVM 堆内存使用情况。
  • Garbage Collector (GC) Activity:垃圾接纳器的活动。

4. 常见问题排查

无法连接 JMX


  • 防火墙问题
    确保 Kafka 机器的 JMX_PORT 端口对外开放。
    1. sudo ufw allow 9999
    复制代码
  • 端口冲突
    检查其他服务是否占用了 JMX_PORT 端口。
    1. netstat -tuln | grep 9999
    复制代码
  • 远程连接问题
    如果是从远程机器连接,实验在 java.rmi.server.hostname 中设置 Kafka 机器的外部 IP:
    1. export KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Djava.rmi.server.hostname=<external_ip>"
    复制代码
JConsole 卡顿或加载慢



  • 这是由于监控数据量大导致的,可以通过调解 Kafka 的 jmx_prometheus_javaagent 来减少不必要的监控。

5. 替换工具

如果 JConsole 不得当,可以使用更现代化的监控工具,例如:


  • Prometheus + Grafana:通过 JMX Exporter 将 Kafka 指标集成到 Prometheus。
  • VisualVM:更丰富的 JVM 调试和监控功能。
如需进一步设置帮助,请提供更多环境细节!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表