Kafka如何做到1秒处理1500万条消息?

首页

2018-10-16

请记住,将缓冲区调大并不总是好事,如果Producer由于某种原因而失效了(例如,某个Leader的响应速度比确认还要慢),那么在堆内内存(on-heap)中的缓冲的数据量越多,其需要回收的垃圾也就越多。 ⑩检测应用程序,以跟踪诸如生成的消息数、平均消息大小、以及已使用的消息数等指标在各个Brokers上,请压缩Topics所需的内存和CPU资源。

日志压缩(请参见https:///documentation/#compaction)需要各个Broker上的堆栈(内存)和CPU周期都能成功地配合实现而如果让那些失败的日志压缩数据持续增长的话,则会给Brokers分区带来风险。 您可以在Broker上调整和这两个参数,但是请记住,这两个值都会影响到各个Brokers上的堆栈使用。 如果某个Broker抛出OutOfMemoryError异常,那么它将会被关闭、并可能造成数据的丢失。 而缓冲区的大小和线程的计数,则取决于需要被清除的TopicPartition数量、以及这些分区中消息的数据速率与密钥的大小。 对于Kafka的版本而言,通过ERROR条目来监控日志清理程序的日志文件,是检测其线程可能出现问题的最可靠方法。 通过网络吞吐量来监控Brokers请监控发向(transmit,TX)和收向(receive,RX)的流量,以及磁盘的I/O、磁盘的空间、以及CPU的使用率,而且容量规划是维护群集整体性能的关键步骤。

在群集的各个Brokers之间分配分区的Leader关系Leader通常会需要大量的网络I/O资源。 例如,当我们将复制因子(replicationfactor)配置为3、并运行起来时。 Leader必须首先获取分区的数据,然后将两套副本发送给另两个Followers,进而再传输到多个需要该数据的Consumers上。

因此在该例子中,单个Leader所使用的网络I/O,至少是Follower的四倍。

而且,Leader还可能需要对磁盘进行读操作,而Follower只需进行写操作。 不要忽略监控Brokers的in-syncreplica(ISR)shrinks、under-replicatedpartitions和unpreferredleaders这些都是集群中潜在问题的迹象。 例如,单个分区频繁出现ISR收缩,则暗示着该分区的数据速率超过了Leader的能力,已无法为Consumer和其他副本线程提供服务了。

按需修改ApacheLog4j的各种属性详细内容可以参考:https:///apache/kafka/blob/trunk/config/的Broker日志记录会耗费大量的磁盘空间,但是我们却不能完全关闭它。

因为有时在发生事故之后,需要重建事件序列,那么Broker日志就会是我们最好的、甚至是唯一的方法。

禁用Topic的自动创建,或针对那些未被使用的Topics建立清除策略例如,在设定的x天内,如果未出现新的消息,您应该考虑该Topic是否已经失效,并将其从群集中予以删除。

此举可避免您花时间去管理群集中被额外创建的元数据。 对于那些具有持续高吞吐量的Brokers,请提供足够的内存,以避免它们从磁盘子系统中进行读操作我们应尽可能地直接从操作系统的缓存中直接获取分区的数据。 然而,这就意味着您必须确保自己的Consumers能够跟得上节奏,而对于那些延迟的Consumer就只能强制Broker从磁盘中读取了。

对于具有高吞吐量服务级别目标(servicelevelobjectives,SLOs)的大型群集,请考虑为Brokers的子集隔离出不同的Topic至于如何确定需要隔离的Topics,则完全取决于您自己的业务需要。 例如,您有一些使用相同群集的联机事务处理(multipleonlinetransactionprocessing,OLTP)系统。

那么将每个系统的Topics隔离到不同Brokers子集中,则能够有助于限制潜在事件的影响半径。

在旧的客户端上使用新的Topic消息格式。

应当代替客户端,在各个Brokers上加载额外的格式转换服务当然,最好还是要尽量避免这种情况的发生。 不要错误地认为在本地主机上测试好Broker,就能代表生产环境中的真实性能了要知道,如果使用复制因子为1,并在环回接口上对分区所做的测试,是与大多数生产环境截然不同的。 在环回接口上网络延迟几乎可以被忽略的,而在不涉及到复制的情况下,接收Leader确认所需的时间则同样会出现巨大的差异。 希望上述各项建议能够有助于您更有效地去使用Kafka。 如果您想提高自己在Kafka方面的专业知识,请进一步查阅Kafka配套文档中的操作部分,其中包含了有关操作群集等实用信息。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为】【编辑推荐】【责任编辑:TEL:(010)68476606】。