日活量百万数据,Kafka硬件如何配置?kafka生产者消费者调优

堆内存修改方式


在 kafka-server-start.sh 中修改

if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then

 export KAFKA_HEAP_OPTS="-Xmx10G -Xms10G"

fi

查看 Kafka 的 GC 情况,次数少则不用修改


#Kafka 进程号

jps

#查看 Kafka 的 GC 情况

jstat -gc 进程 ls 10

查看内存使用率


jmap -heap 进程号

配置页缓存

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

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

CPU 选择

kafka中最占cpu的三个线程,总量建议占总cpu的2/3

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

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

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

生产者优化


生产者发送数据过程:

如何提高吞吐量

| 参数名称 | 描述 |

| — | — |

| buffer.memory | RecordAccumulator 缓冲区总大小,默认 32m |

| batch.size | 缓冲区一批数据最大值,默认 16k。适当增加该值,可 以提高吞吐量,但是如果该值设置太大,会导致数据传 输延迟增加 |

| linger.ms | 如果数据迟迟未达到 batch.size,sender 等待 linger.time 之后就会发送数据。单位 ms,默认值是 0ms,表示没有 延迟。生产环境建议该值大小为 5-100ms 之间 |

| compression.type | 生产者发送的所有数据的压缩方式。默认是 none,也就 是不压缩。 支持压缩类型:none、gzip、snappy、lz4 和 zstd。 |

数据可靠性: ACK 级别设置为-1 + 分区副本大于等于 2 + ISR 里应 答的最小副本数量大于等于 2

acks:0:生产者发送过来的数据,不需要等数据落盘应答。 1:生产者发送过来的数据,Leader 收到数据后应答。 -1(all):生产者发送过来的数据,Leader+和 isr 队列 里面的所有节点收齐数据后应答。默认值是-1,-1 和 all 是等价的。

数据去重

开启幂等性:保证单分区单回话数据可靠

enable.idempotenc:是否开启幂等性,默认 true,表示开启幂等性

完全去重:开启事务

事务api


// 1 初始化事务

void initTransactions();

// 2 开启事务

void beginTransaction() throws ProducerFencedException;

// 3 在事务内提交已经消费的偏移量(主要用于消费者)

void sendOffsetsToTransaction(Map<TopicPartition, OffsetAndMetadata> offsets,

 String consumerGroupId) throws 

ProducerFencedException;

// 4 提交事务

void commitTransaction() throws ProducerFencedException;

// 5 放弃事务(类似于回滚事务的操作)

void abortTransaction() throws ProducerFencedException;

数据有序:直接将数据放入一个分区

单分区内,有序(有条件的,不能乱序);多分区,分区与分区间无序;

数据乱序:开启幂等性设置ack

| enable.idempotence | 是否开启幂等性,默认 true,表示开启幂等性。 |

| — | — |

| max.in.flight.requests.per.connection | 允许最多没有返回 ack 的次数,默认为 5,开启幂等性 要保证该值是 1-5 的数字 |

Broker 核心参数配置

工作流程

| 参数名称 | 描述 |

| — | — |

| replica.lag.time.max.ms | ISR 中,如果 Follower 长时间未向 Leader 发送通 信请求或同步数据,则该 Follower 将被踢出 ISR。 该时间阈值,默认 30s。 |

| auto.leader.rebalance.enable | 默认是 true。 自动 Leader Partition 平衡。建议 关闭。 |

| leader.imbalance.per.broker.percentage | 默认是 10%。每个 broker 允许的不平衡的 leader 的比率。如果每个 broker 超过了这个值,控制器 会触发 leader 的平衡。 |

| leader.imbalance.check.interval.seconds | 默认值 300 秒。检查 leader 负载是否平衡的间隔 时间。 |

| log.segment.bytes | Kafka 中 log 日志是分成一块块存储的,此配置 是指 log 日志划分 成块的大小,默认值 1G。 |

| log.index.interval.bytes | 默认 4kb,kafka 里面每当写入了 4kb 大小的日志 (.log),然后就往 index 文件里面记录一个索引。 |

| log.retention.hours | Kafka 中数据保存的时间,默认 7 天。 |

| log.retention.minutes | Kafka 中数据保存的时间,分钟级别,默认关闭 |

| log.retention.ms | Kafka 中数据保存的时间,毫秒级别,默认关闭 |

| log.retention.check.interval.ms | 检查数据是否保存超时的间隔,默认是 5 分钟 |

| log.retention.bytes | 默认等于-1,表示无穷大。超过设置的所有日志 总大小,删除最早的 segment |

| log.cleanup.policy | 默认是 delete,表示所有数据启用删除策略; 如果设置值为 compact,表示所有数据启用压缩 策略。 |

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

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

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

| log.flush.interval.messages | 强制页缓存刷写到磁盘的条数,默认是 long 的最 大值,9223372036854775807。一般不建议修改, 交给系统自己管理 |

| log.flush.interval.ms | 每隔多久,刷数据到磁盘,默认是 null。一般不 建议修改,交给系统自己管理 |

服役新节点/退役旧节点

创建一个要均衡的主题


vim topics-to-move.json

#写入

{

 "topics": [

 {"topic": "first"}

 ],

 "version": 1

}

生成一个负载均衡的计划


bin/kafka-reassign-partitions.sh --

bootstrap-server hadoop102:9092 --topics-to-move-json-file 

topics-to-move.json --broker-list "0,1,2,3" --generate

创建副本存储计划(所有副本存储在 broker0、broker1、broker2、broker3 中)


vim increase-replication-factor.json

执行副本存储计划


bin/kafka-reassign-partitions.sh --

bootstrap-server hadoop102:9092 --reassignment-json-file increasereplication-factor.json --execute

验证副本存储计划


bin/kafka-reassign-partitions.sh --

bootstrap-server hadoop102:9092 --reassignment-json-file increasereplication-factor.json --verify

增加分区:分区数只能增加,不能减少


bin/kafka-topics.sh --bootstrap-server 

192.168.6.100:9092 --alter --topic first --partitions 3

增加副本因子

创建 topic


bin/kafka-topics.sh --bootstrap-server 

hadoop102:9092 --create --partitions 3 --replication-factor 1 --

topic four

手动增加副本存储,创建副本存储计划(所有副本都指定存储在 broker0、broker1、broker2 中)


vim increase-replication-factor.json


{"version":1,"partitions":[{"topic":"four","partition":0,"replica

s":[0,1,2]},{"topic":"four","partition":1,"replicas":[0,1,2]},{"t

opic":"four","partition":2,"replicas":[0,1,2]}]}

执行副本存储计划


bin/kafka-reassign-partitions.sh --

bootstrap-server hadoop102:9092 --reassignment-json-file increasereplication-factor.json --execute

手动调整分区副本存储

创建副本存储计划(所有副本都指定存储在 broker0、broker1 中)


vim increase-replication-factor.json


{

"version":1,

"partitions":[{"topic":"three","partition":0,"replicas":[0,1]},

{"topic":"three","partition":1,"replicas":[0,1]},

{"topic":"three","partition":2,"replicas":[1,0]},

{"topic":"three","partition":3,"replicas":[1,0]}]

}

执行副本存储计划

最后

权威指南-第一本Docker书

引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。

image

image

image

image

关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!
,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。

[外链图片转存中…(img-LdFqQ6sj-1721190990979)]

[外链图片转存中…(img-QF21HUdR-1721190990980)]

[外链图片转存中…(img-DXd8zNrY-1721190990981)]

[外链图片转存中…(img-svmYWNgi-1721190990982)]

关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值