• Kafka性能调优


    今天,我们将讨论Kafka Performance Tuning。在本文“Kafka性能调优”中,我们将描述在设置集群配置时需要注意的配置。此外,我们将讨论Tuning Kafka Producers,Tuning Kafka Consumers和Tuning Kafka Brokers
    那么,让我们从Kafka Performance Tuning开始吧。

    Kafka Performance调整

    Kafka性能调优 - Kafka优化的方法

    2. Kafka Performance Tuning是什么?

    在我们讨论Kafka性能调优时,需要考虑的配置参数很少。因此,为了提高性能,最重要的配置是控制磁盘刷新率的配置。
    此外,我们可以在组件的基础上划分这些配置。那么,让我们首先谈谈制片人。因此,生产者方面需要注意的最重要的配置是 -

    • 压缩
    • 批量大小
    • 同步或异步

    而且,在消费者方面,重要的配置是 -

    • 获取大小

    虽然,当我们考虑批量大小时,总是会混淆批量大小最佳。我们可以说,大批量可能很大,以获得高吞吐量,它带来延迟问题。这意味着延迟和吞吐量彼此成反比。
    可能具有低吞吐量和高吞吐量,我们必须为使用队列时间或刷新间隔选择合适的批量大小以找到所需的正确平衡。

    Kafka性能调整图

    Kafka性能调整图

    检查你的卡夫卡表演 - 你站在哪里

    3.调整Kafka以获得最佳性能

    更具体地说,调整涉及两个重要指标:延迟测量和吞吐量测量。延迟度量意味着处理一个事件需要多长时间,类似地,在特定时间内有多少事件到达,这意味着吞吐量度量。因此,大多数系统都针对延迟或吞吐量进行了优化,而Apache Kafka则对两者进行了平衡。此外,我们可以说,一个经过良好调整的Kafka系统只有足够的经纪人来处理主题吞吐量,因为在接收信息时需要处理信息所需的延迟。

    一个。调整卡夫卡制片人

    众所周知,Kafka使用异步发布/订阅模型当我们的生产者调用send()命令时,返回的结果是未来。未来提供了检查过程中信息状态的方法。此外,当批处理准备就绪时,生产者将其发送给代理。基本上,代理等待事件,然后接收结果,并进一步响应事务完成。
    对于延迟和吞吐量,两个参数对于Kafka性能调优尤其重要:
    Apache Kafka用例| 卡夫卡应用程序

    一世。批量大小

    batch.size不是消息数,而是以总字节数来衡量批量大小。这意味着它在向Kafka代理发送消息之前控制要收集的数据字节数。因此,在不超出可用内存的情况下,将其设置为尽可能高。确保默认值为16384. 
    但是,如果我们增加缓冲区的大小,它可能永远不会满。在其他触发器的基础上,例如逗留时间(以毫秒为单位),Producer最终会发送信息。虽然通过将缓冲区批处理大小设置得太高,但我们可能会损害内存使用,这不会影响延迟。
    而且,如果我们的制作人一直在发送,我们可能会获得最佳的吞吐量。此外,如果生产者经常闲置,我们可能没有编写足够的数据来保证当前的资源分配。

    II。灵儿时间

    为了在异步模式下缓冲数据,linger.ms设置最大时间。让我们通过一个例子来理解它,一次设置100个批次100ms的消息。这里,缓冲增加了消息传递延迟,但这提高了吞吐量。
    阅读Apache Kafka Streams | 流处理拓扑
    但是,默认情况下,生产者不会等待。因此,它会在数据可用时发送缓冲区。
    此外,我们可以将linger.ms设置为5并在一个批次中发送更多消息,而不是立即发送。这将为发送的记录增加5毫秒的延迟,但也会减少发送的请求数,即使系统上的负载不能保证延迟。
    因此,为了提高生产者的延迟和吞吐量,请增加linger.ms。

    湾 调整卡夫卡经纪人

    我们知道,主题分为几个分区。此外,每个分区都有一个领导者。此外,对于多个副本,大多数分区都写入领导者。但是,如果领导者没有得到适当的平衡,那么与其他人相比,可能会有人过度劳累。
    因此,基于我们的系统或我们的数据有多重要,我们希望确保我们有足够的复制集来保存我们的数据。建议从每个物理存储磁盘一个分区和每个分区一个使用者开始。
    阅读Apache Kafka Workflow | Kafka Pub-Sub Messaging

    C。调整卡夫卡消费者

    基本上,Kafka消费者可以创建吞吐量问题。主题的使用者数量必须等于分区数量。因为,为了处理跟上生产者所需的所有消费者,我们需要足够的分区。
    在同一个消费者群体中,消费者将分区分开。因此,向组中添加更多消费者可以提高性能,同时添加更多消费者组不会影响性能。
    而且,我们使用-replica.high.watermark.checkpoint.interval.ms的方式属性,可以影响吞吐量。此外,我们可以标记从分区读取时读取信息的最后一点。通过这种方式,如果我们必须返回并找到丢失的数据,我们有一个检查点可以向前移动而不必重新读取先前的数据。因此,如果我们为每个事件设置检查点水印,我们将永远不会丢失消息,但它会显着影响性能。此外,我们有一个安全边际,对吞吐量的影响要小得多,相反,我们将其设置为检查每百条消息的偏移量。

    4. Kafka Tuning中的生产服务器配置

    根据集群环境和机器配置的可用性,以下是我们可以修改的一些配置参数及其值 -

    你知道重要的Kafka工具 - 在这里学习

    Kafka Performance调整

    Kafka性能调优 - 生产服务器配置

    一个。num.replica.fetchers

    此参数定义将数据从leader复制到跟随者的线程数。根据线程的可用性,我们可以修改此参数的值。如果我们有可用的线程,那么让副本获取器的数量并行完成复制是很重要的。

    湾 replica.fetch.max.bytes

    此参数是关于我们想要从每个获取请求中的任何分区获取多少数据。增加此参数的值是很好的,这有助于在关注者中快速创建副本。

    C。replica.socket.receive.buffer.bytes

    如果我们有更少的线程可用于创建副本,我们可以增加缓冲区的大小。此外,如果复制线程与传入消息速率相比较慢,则有助于保存更多数据。

    d。num.partitions

    在实时使用Kafka时,我们应该注意这种配置。我们可以具有并行级别并行并行写入数据,这将自动增加吞吐量。
    了解Storm Kafka与配置和代码的集成
    但是,如果系统配置无法处理,那么增加分区数会降低我们的性能和吞吐量。基本上,如果系统没有足够的线程或只有单个磁盘,那么在创建大量分区以获得更好的吞吐量时没有意义。因此,我们可以说,为主题创建更多分区直接依赖于可用的线程和磁盘。

    即 num.io.threads

    基本上,我们在集群中有多少磁盘,它决定了I / O线程的设置值。此外,服务器使用这些线程来执行请求。因此,许多线程必须依赖于多个磁盘。
    所以,这完全是关于Kafka Performance Tuning。希望你喜欢我们的解释。

    5.结论:Kafka Performance Tuning

    因此,我们已经看到了Kafka Performance调整的整个概念。此外,我们研究了Tuning Kafka Producer,Tuning Kafka Broker,调整Kafka Consumer。另外,我们讨论了5个生产服务器配置。

  • 相关阅读:
    B. Shift and Push
    Codeforces Round #392 (Div. 2)
    D. Make a Permutation!
    C. Bus
    B. Polycarp and Letters
    A. Fair Game
    python-随机数的产生random模块
    python的时间处理-time模块
    python-迭代器与生成器
    python-装饰器
  • 原文地址:https://www.cnblogs.com/a00ium/p/10852969.html
Copyright © 2020-2023  润新知