kafka部署建议

南墨2年前技术文章957

1       集群部署规范

1.1      Cpu规格与挂盘数量的关系

   对于kafka组件需要关注机器中具体处理器超线程个数,即processor的个数,可以通过命令:grep -c processor /proc/cpuinfo 查看。

   这个参数代表了整个机器的处理能力,kafka默认,建议:

            每台机器最大挂盘数量 <= processor / 2

  例如:机器的processor数量为24,那么这个机器的最大挂盘数为12块。

1.2       磁盘挂载方式

Kafka在1.x版本(FI对应版本为6.5.x)之前,对于磁盘容错方面做的不够完善,如果单台节点如果出现一块磁盘故障,那么这个节点的kafka进程就会出现异常,因此,不建议每个broker节点挂载多个单盘。

使用建议:建议每台机器使用raid5来挂载磁盘。单台机器可以挂载多个raid5的逻辑盘,每块逻辑盘的物理盘个数可以按照需求指定。

1.3      Topic创建方式

kafka的一个topic通常代表了一类数据,合理的创建topic是保持kafka集群健壮的基本因素。 标准的topic使用建议如下:

a)      不可无休止的创建而不删除topic。kafka集群的topic数量(或者说topic的分区总量)有一定限,上限根据集群的性能而定。一旦整个集群的分区总量到达上限,会导致kafka集群无法正常服务,建议集群中topic总量不超过1000,每个节点的分区总量不超过2000。

使用建议:如果业务重要或者数据量很大,建议分区量=节点数*磁盘数,如果该数值大于200,则分区数选择为200,如果后期需要需要提升分区数来提升读写性能,可以使用kafka后台命令逐步提升,如果数据量很小,建议分区量=节点数,保证每个节点的数据量均衡。

b)      副本数不可配太多。副本是kafka容错能力的基础,当kafka出现节点故障后,另外的副本会承担leader接收数据责任。副本数增加一个,就需要多一次数据同步,也会使 kafka节点之间的数据流量同步能加一次。如果副本太多会。导致leader节点的数据流量压力增加。

使用建议:创建的topic有2~3备份即可。

c)      机架参数要合理使用。即:保证kafka所创建的topic的分区副本在不同的机架上面,这样能够保证如果出现机架宕机后,kafka依然有可用的副本。但是如果集群中每个机架上面的节点数量不均衡,会导致严重的数据倾斜。例如:kafka总共有2个机架10台机器,如果一个机架上有3个节点,一个机架上面有7个节点,那么3节点机架上的机器的副本数一定大于7节点机架的。

使用建议:如果kafka集群的机器在每个机架上面分布不均衡,在创建topic的时候加入机架不感知参数。

创建方式如下:

kafka-topics.sh --create --topic <topic name> --partitions <Integer: the number of partitions> --replication-factor <Integer: replication factor> --zookeeper <ZK_IP1: 24002,ZK_IP2:24002,.../kafka> --disable-rack-aware

其中ZK_IP为集群zookeeper的ip。

d)      不可频繁的创建删除topic。topic的创建目的应该是一次创建,长时间使用,如果topic出现异常可以删除重建。如果频繁创建,会导致broker节点异常,topic无法正常删除,同时对zookeeper也会造成一定的压力(频繁的创建删除,也就是频繁的增删zookeeper上面的节点,如果频率很大容易导致“羊群效应”和“脑裂”)。例如:每天大批量的创建删除1000个。

使用建议:

a)      如果有删除topic需要。每天删除量不建议超过10个。

b)      规整数据的协议类型,将多个相同类型的数据合并到一个topic中,创建后长期使用。防止出现topic频繁创建删除的情形。


相关文章

阿里云ES跨账号数据迁移(reindex)

阿里云ES跨账号数据迁移(reindex)

1、背景与前置条件总的来说,阿里云es集群间数据迁移,有三中方式,logstash、reindex、镜像备份恢复,分别使用不同的场景,本文档主要讨论reindex方式进行账号下,ES跨集群迁移时,使用...

MySQL运维实战(4.5) SQL_MODE之NO_ZERO_DATE和NO_ZERO_IN_DATE

NO_ZERO_DATE:日期中不允许'0000-00-00'NO_ZERO_IN_DATE:日期中年、月或日不允许为0,如不允许'2021-00-01', '...

CDH时钟同步问题

CDH时钟同步问题

首先执行如下命令:查看chronyd是否启动systemctl status chronyd如果没启动执行如下命令启动systemctl restart chronyd每台检查时间状态chronyc...

 MySQL性能优化(十)in参数列表过长导致的性能问题

MySQL性能优化(十)in参数列表过长导致的性能问题

有时候可能有人会问:where条件中使用in和or有什么区别,哪种写法性能更好?in参数个数有没有限制?下面就是一个由于in参数列表过长导致的性能问题。一个例子当时使用的是mysql 5.6版本SEL...

Redis Sentinel与Cluster安装部署(一)

Redis Sentinel与Cluster安装部署(一)

1、部署规划版本redis5.0.8目录规划软件安装目录/usr/local/redis5可执行文件目录/usr/local/redis5/bin数据目录/usr/local/redis5/dada/...

hadoop集群集成Iceberg操作指导

hadoop集群集成Iceberg操作指导

hadoop集群集成Iceberg操作指导书一、    准备工作1.       大数据集群运行正常,完成hi...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。