(11)如何确定合适分区数(1)

Kafka高吞吐量,就是通过partition将topic中消息存到Kafka集群不同broker中。partition并行度调优最小单元

理论分区越多,吞吐量就越大。

一、实际分区过多弊端:

1、客户端/服务器端需内存就越多

1)Kafka0.8.2后,producer参数batch.size(默认16KB),为每个分区缓存消息,积累一定大小或时间,移除发往broker分区多,内存占用多

2)consumer消费线程数也增加。如10000个分区,创建10000个线程,创建大约10000个Socket获取分区数据。线程的开销成本高

3——服务器端缓存成本大,服务器端维护controller,FetcherManager等

2、文件句柄的开销

broker每个partition对应磁盘一个目录。每个日志数据分配索引和数据文件打开index文件句柄和数据文件句柄。partition多,句柄数也多,超过操作系统文件句柄数量限制

3、能增加端对端的延迟

延迟时间:producer发送 到 consumer接收时间

    1)问题原因:producer消息提交后暴露。例,所有in-sync副本同步复制完才暴露。复制时间是延迟最原因。默认broker只分配一个线程复制。

    2)解决:增大kafka集群缓解。例,1000个分区leader放1个/10个broker节点,延迟差异。每个broker节点平均处理100个分区,数十毫秒变几毫秒

    3)根据经验b个broker节点和复制因子r,整个kafka集群partition数量<=100*b*r个,即单partition的leader<=100。

4、降低高可用性

partition多个副本,在不同broker,一个leader,其他follower

1)集群自动化管理副本,通过leader确保同步。broker故障里面partition不可用controller节点broker自动选leader,接收请求。从zk读和改影响partition元数据信息。

2)broker停止服务前,controller将该broker所有leader一个个移走。从客户层面看,系统在很小时间不可用

3)broker意外停服(kill -9方式),不可用时间受影响partition数有关:如2节点集群2000partition,每个2个副本。一个broker宕1000个partition同时不可用。每个partition 5ms恢复,1000个5秒钟。

4)恢复慢:controller节点broker宕:选举恢复到新broker不启动,自动错误恢复,但新的controller要从zk中读每个partition元数据用于初始化数据。partition多不可用时间长

总之,partition多带高吞吐量。但partition过大过多,对可用性和消息延迟带负面影响

二、如何确定合理分区数?

partition均衡负载是吞吐量关键,根据生产和消费者目标吞吐量估计。

测试topic的producer和consumer吞吐量,Tp和Tc,MB/s。目标吞吐量TtnumPartitions = Tt / max(Tp, Tc)

https://mp.weixin.qq.com/s/0EGp8V_OwbU47nHCzUWLuA

你可能感兴趣的:((11)如何确定合适分区数(1))