Kafka:硬件配置选择和调优

场景说明

100 万日活,每人每天 100 条日志,

每天总共的日志条数是 100 万 * 100 条 = 1 亿条(中型公司偏小)。

1 亿 / 24 小时 / 60 分 / 60 秒  =  1150 条/每秒钟。

每条日志大小:0.5k - 2k(取 1k)(甚至更多根据实际情况)。

1150 条/每秒钟 * 1k ≈ 1m/s 。

高峰期(中午小高峰 下午 8 - 12):1m/s  *  20 倍  = 20m/s    最大 40m/s 。

每秒多少数据量:20MB/s。 

服务器台数选择 

 服务器台数 =  2   * (生产者峰值生产速率 * 副本 / 100) +  1

                    =  2   * (20m/s  *  2  /  100) +  1

                    =  3 台

建议 3 台服务器。

磁盘选择

kafka 底层主要是顺序写,固态硬盘和机械硬盘的顺序写速度差不多。

建议选择普通的机械硬盘。

每天总数据量:1 亿条 * 1k ≈ 100g

100g * 副本 2 * 保存时间 3 天 / 0.7 ≈ 1T

建议三台服务器硬盘总大小,大于等于 1T。

内存选择

Kafka 内存组成: 堆内存 (Kafka 内部配置)+ 页缓存(服务器内存)

1)Kafka 堆内存建议每个节点:10g ~ 15g

在bin目录下 kafka-server-start.sh 中修改

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
 export KAFKA_HEAP_OPTS="-Xmx10G -Xms10G"
fi

(1)查看 Kafka 进程号2321

jps


2321 Kafka
5255 Jps
1931 QuorumPeerMain

(2)根据 Kafka 进程号,查看 Kafka 的 GC 情况(主要看YGC

jstat -gc 2321 1s 10


S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 
0.0 7168.0 0.0 7168.0 103424.0 60416.0 1986560.0 148433.5 52092.0 46656.1 6780.0 6202.2 13 0.531 0 0.000 0.531
0.0 7168.0 0.0 7168.0 103424.0 60416.0 1986560.0 148433.5 52092.0 46656.1 6780.0 6202.2 13 0.531 0 0.000 0.531
0.0 7168.0 0.0 7168.0 103424.0 60416.0 1986560.0 148433.5 52092.0 46656.1 6780.0 6202.2 13 0.531 0 0.000 0.531
0.0 7168.0 0.0 7168.0 103424.0 60416.0 1986560.0 148433.5 52092.0 46656.1 6780.0 6202.2 13 0.531 0 0.000 0.531
0.0 7168.0 0.0 7168.0 103424.0 60416.0 1986560.0 148433.5 52092.0 46656.1 6780.0 6202.2 13 0.531 0 0.000 0.531
0.0 7168.0 0.0 7168.0 103424.0 61440.0 1986560.0 148433.5 52092.0 46656.1 6780.0 6202.2 13 0.531 0 0.000 0.531
0.0 7168.0 0.0 7168.0 103424.0 61440.0 1986560.0 148433.5 52092.0 46656.1 6780.0 6202.2 13 0.531 0 0.000 0.531
0.0 7168.0 0.0 7168.0 103424.0 61440.0 1986560.0 148433.5 52092.0 46656.1 6780.0 6202.2 13 0.531 0 0.000 0.531
0.0 7168.0 0.0 7168.0 103424.0 61440.0 1986560.0 148433.5 52092.0 46656.1 6780.0 6202.2 13 0.531 0 0.000 0.531
0.0 7168.0 0.0 7168.0 103424.0 61440.0 1986560.0 148433.5 52092.0 46656.1 6780.0 6202.2 13 0.531 0 0.000 0.531

参数说明:

  • S0C:第一个幸存区的大小;
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小;
  • S1U:第二个幸存区的使用大小
  • EC:伊甸园区的大小;
  • EU:伊甸园区的使用大小
  • OC:老年代大小;
  • OU:老年代使用大小
  • MC:方法区大小;
  • MU:方法区使用大小
  • CCSC:压缩类空间大小;
  • CCSU:压缩类空间使用大小
  • YGC:年轻代垃圾回收次数;
  • YGCT:年轻代垃圾回收消耗时间
  • FGC:老年代垃圾回收次数;
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间;

 (3)根据 Kafka 进程号,查看 Kafka 的堆内存

jmap -heap 2321


Attaching to process ID 2321, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.212-b10

using thread-local object allocation.
Garbage-First (G1) GC with 8 thread(s)

Heap Configuration:

 MinHeapFreeRatio = 40
 MaxHeapFreeRatio = 70
 MaxHeapSize = 2147483648 (2048.0MB)
 NewSize = 1363144 (1.2999954223632812MB)
 MaxNewSize = 1287651328 (1228.0MB)
 OldSize = 5452592 (5.1999969482421875MB)
 NewRatio = 2
 SurvivorRatio = 8
 MetaspaceSize = 21807104 (20.796875MB)
 CompressedClassSpaceSize = 1073741824 (1024.0MB)
 MaxMetaspaceSize = 17592186044415 MB
 G1HeapRegionSize = 1048576 (1.0MB)

Heap Usage:
G1 Heap:
 regions = 2048
 capacity = 2147483648 (2048.0MB)
 used = 246367744 (234.95458984375MB)
 free = 1901115904 (1813.04541015625MB)
 11.472392082214355% used
G1 Young Generation:
Eden Space:
 regions = 83
 capacity = 105906176 (101.0MB)
 used = 87031808 (83.0MB)
 free = 18874368 (18.0MB)
 82.17821782178218% used
Survivor Space:
 regions = 7
 capacity = 7340032 (7.0MB)
 used = 7340032 (7.0MB)
 free = 0 (0.0MB)
 100.0% used
G1 Old Generation:
 regions = 147
 capacity = 2034237440 (1940.0MB)
 used = 151995904 (144.95458984375MB)
 free = 1882241536 (1795.04541015625MB)
 7.471886074420103% used

13364 interned Strings occupying 1449608 bytes.

2)页缓存:页缓存是 Linux 系统服务器的内存。我们只需要保证 1 个 segment(1g)中 25%的数据在内存中就好。

        每个节点页缓存大小  = (分区数  *  1g  *  25%) /  节点数。例如 10 个分区,页缓存大小 =(10 * 1g * 25%)/ 3 ≈ 1g

        建议服务器内存大于等于 11G。

CPU 选择

num.io.threads = 8 负责写磁盘的线程数,整个参数值要占总核数的 50%。

num.replica.fetchers = 1 副本拉取线程数,这个参数占总核数的 50%的 1/3。

num.network.threads = 3 数据传输线程数,这个参数占总核数的 50%的 2/3。

建议 32 个 cpu core。

这样的话留 8 个 cpu core给其他使用比如监听心跳等

剩下 24 个 cpu core

num.io.threads = 12

num.replica.fetchers = 4

num.network.threads = 8

网络选择

 网络带宽  =  峰值吞吐量 ≈ 20MB/s 选择千兆网卡即可。

100Mbps 单位是 bit;10M/s 单位是 byte ; 1byte = 8bit,100Mbps/8 = 12.5M/s。

一般百兆的网卡(100Mbps )、千兆的网卡(1000Mbps)、万兆的网卡(10000Mbps)。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Kafka 是一个分布式的消息系统,它的性能和稳定性非常重要。优化 Kafka 配置参数可以提高 Kafka 的吞吐量和稳定性。以下是一些常用的 Kafka 配置参数优化建议: 1. `num.network.threads` 和 `num.io.threads` 参数控制 Kafka 网络和 I/O 线程的数量。建议将 `num.network.threads` 设置为 CPU 核心数的两倍,将 `num.io.threads` 设置为 CPU 核心数的一半。 2. `socket.send.buffer.bytes` 和 `socket.receive.buffer.bytes` 参数控制 Kafka 网络套接字的发送和接收缓冲区大小。建议将它们设置为 64KB 或更高。 3. `socket.request.max.bytes` 参数控制 Kafka 网络套接字的最大请求大小。建议将它设置为足够大的值,以支持你的最大消息大小。 4. `log.retention.bytes` 和 `log.segment.bytes` 参数控制 Kafka 消息日志的段大小和保留大小。建议根据你的磁盘大小和消息吞吐量,设置合适的值。 5. `num.partitions` 参数控制 Kafka 主题的分区数。建议将它设置为主题并发消费者数量的倍数。 6. `queued.max.requests` 参数控制 Kafka 生产者发送消息的批处理大小。建议将它设置为 1 或更高,以达到最佳的吞吐量和延迟。 7. `unclean.leader.election.enable` 参数控制当 Kafka 集群中的一个节点失效时,是否允许使用未同步的副本替代它。建议将它设置为 false,以确保数据的一致性。 8. `min.insync.replicas` 参数控制 Kafka 消息的最小同步副本数。建议将它设置为大于等于 2,以确保数据的可靠性和一致性。 以上是一些常用的 Kafka 配置参数优化建议,不同的应用场景可能需要不同的配置。建议根据实际情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员无羡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值