20条关于Kafka集群应对高吞吐量的避坑指南

  • 时间:
  • 浏览:1
  • 来源:uu直播快3平台

大伙儿应尽意味着 地直接从操作系统的缓存中直接获取分区的数据。然而,这就意味着 你都可不能能 确保我本人的Consumers都都可不能能跟得上“节奏”,而对于有有哪些延迟的Consumer就这样 强制Broker从磁盘中读取了。

4)调优Consumer的套接字缓冲区(socket buffers),以应对数据的高速流入

10)检测应用多线程 ,以跟踪诸如生成的消息数、平均消息大小、以及已使用的消息数等指标

Consumer可不都可不能能按照Consumer group进行逻辑划分。Topic Partition被均衡地分配给组中的所有Consumers。

Leader通常会都可不能能 大量的网络I/O资源。这种,当大伙儿将一键复制因子(replication factor)配置为3、并运行起来时。

有点痛 是buffer.memory和batch.size(以字节为单位)。意味着 batch.size是按照分区设定的,而Producer的性能和内存的使用量,都可不都可不能能与Topic中的分区数量相关联。

在环回接口上网络延迟几乎可不都可不能能被忽略的,而在不涉及到一键复制的具体情况下,接收Leader确认所需的时间则同样会出现巨大的差异。

Kafka中的根小记录或数据单位。每条消息都可不能能 有有有俩个多键和对应的有有有俩个多值,有时后会有可选的消息头。

18)对于具有高吞吐量服务级别目标(service level objectives,SLOs)的大型群集,请考虑为Brokers的子集隔离出不同的Topic

本文来自云栖社区合作者者伙伴“DBAplus社群”,了解相关信息可不都可不能能关注“DBAplus社群”。

二、总结

Topic是有有哪些被发布的数据记录或消息的本身类别。消费者通过订阅Topic来读取写给它们的数据。

对于延迟为1毫秒或更多的高下行速率 的网络(如10Gbps或更高),请考虑将套接字缓冲区设置为8或16MB。

请监控发向(transmit,TX)和收向(receive,RX)的流量,以及磁盘的I/O、磁盘的空间和CPU的使用率,如果容量规划是维护群集整体性能的关键步骤。

13)在群集的各个Brokers之间分配分区的Leader关系

固定大小的缓冲区都都可不能能阻止Consumer将这样来越多的数据拉到堆栈上,以至于JVM花费掉其所有的时间去执行垃圾回收,进而无法履行其外理消息的本质工作。

请参见:

要知道,意味着 使用一键复制因子为1,并在环回接口上对分区所做的测试,是与大多数生产环境截然不同的。

 ●  Consumers(消费者) ●  Producers(生产者)

 ●  Brokers(代理)

而缓冲区的大小和多线程 的计数,则取决于都可不能能 被清除的Topic Partition数量、以及有有哪些分区中消息的数据下行速率 与密钥的大小。

8)为各个Producer配置Retries

11)在各个Brokers上,请压缩Topics所需的内存和CPU资源

当Consumer的下行速率 跟不上消息的产生下行速率 时,Consumer就会意味着 无法从分区中读取消息,而产生延迟。

Message(消息)

Leader都可不能能 首先获取分区的数据,如果将两套副本发送给另有有有俩个多Followers,进而再传输到多个都可不能能 该数据的Consumers上。

本文作者:陈峻编译

Producer将消息发布到Kafka的topics上。Producer决定向topic分区的发布辦法 ,如:轮询的随机辦法 、或基于消息键(key)的分区算法。

3)意味着 Consumers运行的是比Kafka 0.10都可不能能 旧的版本,这样 请马上升级

我将从如下八个方面进行展开:

参考链接:

这有有有俩个多默认值对于高吞吐量的环境而言都太小了,有点痛 意味着 Broker和Consumer之间的网络下行速率 延迟积(bandwidth-delay product)大于局域网(local areanetwork,LAN)时。

这种,在设定的x天内,意味着 未出现新的消息,你应该考虑该Topic不意味着 失效,并将其从群集中予以删除。此举可外理花时间去管理群集中被额外创建的元数据。

同去,数据下行速率 也都都可不能能标识出单个Consumer在不产生延时的具体情况下,所都可不能能 支持的最低性能值。

希望上述各项建议都都上助于于大伙儿更有效地去使用Kafka。意味着 你想提高我本人在Kafka方面的专业知识,请进一步查阅Kafka配套文档中的“操作”帕累托图,其含晒 晒 了有关操作群集等实用信息。

同去,它在自动化数据保留方面的限制,高流量的发布+订阅(publish-subscribe,pub/sub)模式等,意味着 后会影响到系统的性能。可不都可不能能毫不夸张地说,意味着 有有哪些存放着数据流的系统无法按需扩容、或稳定性不可靠搞笑的话,估计大伙儿老是会寝食难安。

原文发布时间为:2018-11-21

换言之,同一组中的每有有有俩个多Consumer都能群组都看分配给他的相应分区的所有消息。意味着 某个Consumer指在“离线”具体情况搞笑的话,这样 该分区意味着 被分配给同组中的如果Consumer。这就是我所谓的“再均衡(rebalance)”。

这样 将每个系统的Topics隔离到不同Brokers子集中,则都都上助于于限制潜在事件的影响半径。

意味着 是在Java虚拟机(JVM)中运行,Consumers应当使用固定大小的缓冲区,如果最好是使用堆外内存(off-heap)。

当然,意味着 组中的Consumer多于分区数,则有些Consumer意味着 指在闲置的具体情况。

17)对于有有哪些具有持续高吞吐量的Brokers,请提供足够的内存,以外理它们从磁盘子系统中进行读操作

4针对Brokers

每个分区都可不能能 有有有俩个多Leader和存装进各个Follower上的一到多个副本(即:数据的副本),此法可外理某个Broker的失效。

16)禁用Topic的自动创建,或针对有有哪些未被使用的Topics建立清除策略

Consumer通过订阅Topic partition,来读取Kafka的各种Topic消息。如果,消费类应用外理会收到消息,以完成指定的工作。

5)设计具有高吞吐量的Consumers,以便按需实施背压(back-pressure)

对于Kafka的0.10.2.1版本而言,通过ERROR条目来监控日志清理多线程 的日志文件,是检测其多线程 意味着 出现间题的最可靠辦法 。

如果,此处的设定值将取决于如下十几个 因素:

Kafka是本身高效的分布式消息系统。在性能上,它具有内置的数据冗余度与弹性,也具有高吞吐能力和可扩展性。

这种,长时间垃圾回收的停滞,意味着 意味着 ZooKeeper的会话被丢弃、或Consumer group指在再均衡具体情况。

https://kafka.apache.org/documentation/#compaction

对于Broker来说也这样 ,意味着 垃圾回收停滞的时间太长,则会产生集群掉线的风险。

7)配置Producer,以等待图片各种确认

意味着 这样 用Acks来配置Producer(或称“fireand forget”)搞笑的话,则消息意味着 会悄然丢失。

在0.8.x版中,Consumer使用Apache ZooKeeper来协调Consumer group,而有些已知的Bug会意味着 其长期指在再均衡具体情况,或是直接意味着 再均衡算法的失败(大伙儿称之为“再均衡风暴”)。

http://lmax-exchange.github.io/disruptor/files/Disruptor-1.0.pdf

如果,对于都可不能能 启动“热”分区的Consumers来说,自动调整意味着 不想这样 快。

这种,在New Relic的生产环境中,Kafka群集每秒都都可不能能外理超过30000万条消息,如果其数据聚合率接近1Tbps。可见,Kafka大幅冗杂了对于数据流的外理,如果它也获得了众多应用开发人员和数据管理专家的青睐。

Topic Partition(主题分区)

Topic(主题)

如果,在同有有有俩个多Consumer group中,所有的Consumer都以负载均衡的辦法 运作。

 ●  其次,有有哪些为具有最高数据下行速率 的分区,所配置的最大保留空间,会意味着 Topic含晒 些分区的磁盘使用量也做相应地增长。 ●  第三,根据分区的Leader关系所实施的最佳均衡方案,比简单地将Leader关系分散到所有Broker上,要更为冗杂。在同一Topic中,“热”分区会“承载”10倍于有些分区的权重。

有关Topic Partition的使用,可不都可不能能参阅《Kafka Topic Partition的各种有效策略》

如果在再均衡期间,有有有俩个多或多个分区会被分配给同一组中的每个Consumer。

在进行大型操作时,各个分区在数据下行速率 上的参差不齐是非常难以管理的。

要了解各种最佳实践,首先都可不能能 熟悉如下关键术语:

至于如可选着都可不能能 隔离的Topics,则完全取决于我本人的业务都可不能能 。这种,你有有些使用相同群集的联机事务外理(multipleonline transaction processing,OLTP)系统。

如果将都都可不能能应对Broker的Leader分区出现无法立刻响应Produce请求的具体情况。

14)无须忽略监控Brokers的in-sync replica(ISR)shrinks、under-replicatedpartitions和unpreferred leaders

其意味着 来自于如下有有有俩个多方面:

Consumer group(消费组)

意味着 有时在指在事故如果,都可不能能 重建事件序列,这样 Broker日志就会是大伙儿最好的、甚至是唯一的辦法 。

通常,大伙儿应该保证系统只去外理其能力范围内的数据,而无须超负荷“消费”,进而意味着 多线程 中断“挂起”,或出现Consume group的溢出。

相反,意味着 组中的Consumer少于分区数,则有些Consumer会获得来自有有有俩个多以上分区的消息。

19)在旧的客户端上使用新的Topic消息格式。应当代替客户端,在各个Brokers换成载额外的格式转换服务

https://blog.newrelic.com/engineering/effective-strategies-kafka-topic-partitioning/

当然,最好还是要尽量外理你这种具体情况的指在。

Broker(代理)

Consumer(消费者)

1针对Partitions

https://github.com/apache/kafka/blob/trunk/config/log4j.properties

此处所谓“分区的数据下行速率 ”是指数据的生成下行速率 。换言之,它是由“平均消息大小”乘以“每秒消息数”得出的数据下行速率 决定了在给定时间内,所能保证的数据保存空间的大小(以字节为单位)。

意味着 内存过低,也大约考虑设置为1MB。当然,也可不都可不能能设置为-1,它会让底层操作系统根据网络的实际具体情况,去调整缓冲区的大小。

一、快速了解Kafka的概念与架构

请参见Disruptor模式:

群集中的所有Broker都可不都可不能能作为Leader和Follower,如果有有有俩个多Broker最多这样 有有有有俩个多Topic Partition的副本。Leader可被用来进行所有的读写操作。

9)为高吞吐量的Producer,调优缓冲区的大小

1)了解分区的数据下行速率 ,以确保提供大约的数据保存空间

为了减少上述冗杂性,我在此分享New Relic公司为Kafka集群在应对高吞吐量方面的20项最佳实践。

20)无须错误地认为在本地主机上测试好Broker,就能代表生产环境中的真实性能了

在Kafka的0.10.x版本中,参数receive.buffer.bytes的默认值为64KB。而在Kafka的0.8.x版本中,参数socket.receive.buffer.bytes的默认值为3000KB。

2)除非有有些架构上的都可不能能 ,如果在写Topic时请使用随机分区

其默认值为3,当然是非常低的。不过,正确的设定值取决于你的应用多线程 ,即:都可不能能 有哪些对于数据丢失零容忍的应用而言,请考虑设置为Integer.MAX_VALUE(有效且最大)。

有有哪些都可不能能 集群中潜在间题的迹象。这种,单个分区频繁出现ISR收缩,则暗示着该分区的数据下行速率 超过了Leader的能力,已无法为Consumer和有些副本多线程 提供服务了。

Kafka的Broker日志记录会耗费大量的磁盘空间,如果大伙儿却这样 完全关闭它。

籍此Producer都都可不能能获知消息是不是真正被发送到了Broker的分区上。在Kafka的0.10.x版本上,其设置是Acks;而在0.8.x版本上,则为request.required.acks。

Producer(生产者)

Apache Kafka是一款流行的分布式数据流平台,它意味着 广泛地被诸如New Relic(数据智能平台)、Uber、Square(移动支付公司)等大型公司用来构建可扩展的、高吞吐量的、高可靠的实时数据流系统。

而在再均衡风暴中,分区的所有权会持续在各个Consumers之间流转,这反而阻碍了任何有有有俩个多Consumer去真正获取分区的所有权。

Kafka通过一键复制,来提供容错功能,如果单个节点的故障、或分区Leader关系的更改不想影响到系统的可用性。

 ●  要生成的分区数; ●  可用的内存量。

请记住,将缓冲区调大无须老是好事,意味着 Producer意味着 本身意味着 而失效了(这种,某个Leader的响应下行速率 比确认都可不能能 慢),这样 在堆内内存(on-heap)中的缓冲的数据量这样来越多,其都可不能能 回收的垃圾也就这样来越多。

如果在该例子中,单个Leader所使用的网络I/O,大约是Follower的四倍。如果,Leader还意味着 都可不能能 对磁盘进行读操作,而Follower只需进行写操作。

Kafka以分布式系统或集群的辦法 运行,这样 群集中的每个节点称为有有有俩个多Broker。

不同的Topic被分为不同的分区,而每根小消息后会被分配有有有俩个多Offset,通常每个分区后会被一键复制大约一到两次。

6)在JVM上运行各种Consumers时,请警惕垃圾回收对它们意味着 产生的影响

15)按需修改Apache Log4j的各种属性

Lag(延迟)

其公式如下:time=messages/(consume rate per second - produce rate per second)

然而,在大型系统中Kafka的应用会比较冗杂。意味着 你的Consumers无法跟上数据流搞笑的话,各种消息往往在未被查看如果就意味着 消失掉了。

12)通过网络吞吐量来监控Brokers

让他在Broker上调整log.cleaner.dedupe.buffer.size和log.cleaner.threads这有有有俩个多参数,如果请记住,这有有有俩个多值后会影响到各个Brokers上的堆栈使用。

在功能上,它支持自动化的数据保存限制,都都可不能能以“流”的辦法 为应用提供数据转换,以及按照“键-值(key-value)”的建模关系“压缩”数据流。

日志压缩都可不能能 各个Broker上的堆栈(内存)和CPU周期都能成功地配合实现,而意味着 让有有哪些失败的日志压缩数据持续增长搞笑的话,则会给Brokers分区带来风险。

2针对Consumers

Offset(偏移量)

延迟表示为分区头后面 的Offset数量。从延迟具体情况(到“追赶上来”)恢复正常所都可不能能 的时间,取决于Consumer每秒都都可不能能应对的消息下行速率 。

单个分区中的每根小消息都被分配有有有俩个多Offset,它是有有有俩个多单调递增的整型数,可用来作为分区中消息的唯一标识符。

意味着 你告诉我数据下行速率 搞笑的话,则无法正确地计算出满足基于给定时间跨度的数据,所都可不能能 保存的空间大小。

完全内容可不都可不能能参考:

3针对Producers

意味着 某个Broker抛出OutOfMemoryError异常,这样 它意味着 被关闭、并意味着 造成数据的丢失。