SSD or HDD: Kafka 大量使用磁盘不假,可它使用的方式多是顺序读写操作,一定程度上规避了机械磁盘最大的劣势,即随机读写操作慢。所以在性能上SSD并没有太大的优势,价格上机械磁盘更有优势
kafka自身提供冗余,可以不使用 RAID
常我们认为SSD的顺序写TPS大约是HDD的4倍
假设你公司的机房环境是千兆网络,即 1Gbps,现在你有个业务,其业务目标或 SLA 是在 1 小时内处理 1TB 的业务数据。那么问题来了,你到底需要多少台 Kafka 服务器来完成这个业务呢?
带宽是 1Gbps,即每秒处理 1Gb 的数据
通常情况下你只能假设 Kafka 会用到 70% 的带宽资源,因为总要为其他应用或进程留一些资源,也就是说单台 Kafka 服务器最多也就能使用大约 700Mb 的带宽资源
通常要再额外预留出 2/3 的资源,即单台服务器使用带宽 700Mb / 3 ≈ 240Mbps。
每秒需要处理 2336Mb 的数据,除以 240,约等于 10 台服务器。
如果消息还需要额外复制两份,那么总的服务器台数还要乘以 3,即 30 台
log.dirs: 指定了 Broker 需要使用的若干个文件目录路径。没有默认参数
log.dir: 只能表示单个路径,它是补充上一个参数用的。
一般只设置 log.dirs 用逗号分隔的多个路径,比如/home/kafka1,/home/kafka2,/home/kafka3这样。最好保证这些目录挂载到不同的物理磁盘上。
listeners: 学名叫监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。格式为:<协议名称,主机名,端口号>
advertised.listeners: 和 listeners 相比多了个 advertised。Advertised 的含义表示宣称的、公布的,就是说这组监听器是 Broker 用于对外发布的。
host.name/port: 不要为它们指定值,都是过期的参数了。
auto.create.topics.enable:是否允许自动创建 Topic。最好设置为 false,有管理员控制创建。
unclean.leader.election.enable:是否允许 Unclean Leader 选举。是否准许落后太多的副本参与选举。false 可能导致分区没有 leader,true 可能导致数据丢失。最好设置为 false,不同版本默认值不一样。
auto.leader.rebalance.enable:是否允许定期进行 Leader 选举。建议设置为 false。
log.retention.{hours|minutes|ms}:这是个“三兄弟”,都是控制一条消息数据被保存多长时间。从优先级上来说 ms 设置最高、minutes 次之、hours 最低。
**log.retention.bytes:**这是指定 Broker 为消息保存的总磁盘容量大小。
**message.max.bytes:**控制 Broker 能够接收的最大消息大小。默认1000012 太少了,还不到 1MB。
Topic 级别参数会覆盖全局 Broker 参数的值,而每个 Topic 都能设置自己的参数值,这就是所谓的 Topic 级别参数。
**retention.ms:**规定了该 Topic 消息被保存的时长。默认是 7 天,即该 Topic 只保存最近 7 天的消息。一旦设置了这个值,它会覆盖掉 Broker 端的全局参数值。
**retention.bytes:**规定了要为该 Topic 预留多大的磁盘空间。和全局参数作用相似,这个值通常在多租户的 Kafka 集群中会有用武之地。当前默认值是 -1,表示可以无限使用磁盘空间。
topic 参数设置:
创建:
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic transaction --partitions 1 --replication-factor 1 --config retention.ms=15552000000 --config max.message.bytes=5242880
修改:
bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name transaction --alter --add-config max.message.bytes=10485760
将你的 JVM 堆大小设置成 6GB 吧,这是目前业界比较公认的一个合理值。我见过很多人就是使用默认的 Heap Size 来跑 Kafka,说实话默认的 1GB 有点小,毕竟 Kafka Broker 在与客户端进行交互时会在 JVM 堆上创建大量的 ByteBuffer 实例,Heap Size 不能太小
怎么设置 kafka jvm 参数呢
设置下面这两个环境变量即可:
export KAFKA_HEAP_OPTS=--Xms6g --Xmx6g export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX
=20 -XX=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true bin/kafka-server-start.sh config/server.properties
本文作者:Yui_HTT
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!