Comments (6)
5.基准测试中使用的哪种语言的kafka client?如果是使用的java client,那么默认的linger.ms=0,意味着消息是实时发送的,batch不起作用,可以尝试把linger.ms调大到100、200,看看异步/同步刷盘的QPS的变化?
是用 java client,用的是 org.apache.kafka.tools.ProducerPerformance,底层是 KafkaProducer。
虽然linger.ms=0
,但是 batch 还是生效的,Kafka 在高负载情况下,相近时间发出的请求一般也会组成 batch。在 Producer 不 batch 的情况下,以测试机的性能,180w qps 是无法达到的。
linger.ms
的作用是做类似 TCP Nagle 算法的主动延迟,针对的是请求量不大的情况下,进一步减低机器负载,在压测场景下不会发挥作用。
6.同步刷盘、不开启batch这个才是实际业务场景经常用到的,所以我比较关注在同步刷盘不开启batch时,kafka和PhxQueue在压测时瓶颈在什么地方?
我们认为实际在线业务较难在 Producer 端做 batch,但是在存储层这个黑盒内做 batch 是比较合适的,不仅聚合效果好,而且业务无感知,对性能提升很大。
文中已有 PhxQueue 和 Kafka 在关闭 Producer 端 batch 后的测试结果,就是上面做第一点答复时贴的表格。
关于压测瓶颈:PhxQueue 瓶颈在 cpu,大概在70%+;Kafka 因为同步刷盘写放大的原因,瓶颈在硬盘写带宽。
from phxqueue.
@nereuschen @chaozh 你好,我来解答一下哈
1.测试结果表格里面的kafka同步刷盘和异步刷盘,我认为不准确,会误导用户,因为同步刷盘意味着log.flush.interval.messages=1.而我的理解是文中想表达的是kafka消息同步复制和消息异步复制,即acks=-1和acks=1。因为producer的send()已经是异步发送消息了。
入队 QPS(w/s) | 平均耗时(ms) | |
---|---|---|
PhxQueue(同步刷盘) | 18 | 90 |
Kafka(异步刷盘) | 18 | 120 |
Kafka(同步刷盘) | 9 | 290 |
表格里所对比的,确实是Kafka的同步刷盘和异步刷盘,区别在于有没有log.flush.interval.messages=1
。
另外,文中关于 Kafka 的测试,都是同步复制,并没有测试异步复制。
因为测试所针对的场景是:
- 少数派节点离线后整体仍可用;
- 数据不丢。
而异步复制并不能满足该场景。
所以文中所有关于 Kafka 的测试,都有如下配置:
replication.factor=3
min.insync.replicas=2
request.required.acks=-1
这也是 Kafka 文档里推荐的配置,详见min.insync.replicas
配置项的解析:
When used together, min.insync.replicas and acks allow you to enforce greater durability guarantees. A typical scenario would be to create a topic with a replication factor of 3, set min.insync.replicas to 2, and produce with acks of "all". This will ensure that the producer raises an exception if a majority of replicas do not receive a write.
2.关于一些配置数据,我想了解一下
(1)开启 Producer Batch,batch.size设置的多大?
(2)使用的是哪个版本的kafka? 0.11.0?
(3)基准测试中修改了哪些kafka的server默认配置参数?
batch.size
使用的是默认配置,默认值是16384
。- Kafka 版本号是
0.11.0.0
。 - 我们在测试过程中只修改了如下几项配置,其余配置均使用默认值:
# 配置平衡可用性和数据可靠性
replication.factor=3
min.insync.replicas=2
request.required.acks=-1
# 提高 Kafka 副本同步效率,默认值为 1
num.replica.fetchers=6
# 同步刷盘开关,测同步刷盘时值为 1,测异步刷盘时使用默认值
log.flush.interval.messages=1
3.ISR VS Paxos ,采用ISR而不采用Paxos,kafka当初设计时考虑到,如果采用Paxos,集群中如果容忍2个节点不可用,需要部署5个节点,而ISR只用部署3个节点
replication.factor=3
min.insync.replicas=2
request.required.acks=-1
Kafka 在这种配置下,3节点部署,若2个节点不可用,整体就不可用了。
文章说同步延时取决于最慢的节点,这个我的理解是kafka从0.8.2版本引入min.insync.replicas,主要是平衡可靠性和吞吐量,根据文中的设置参数min.insync.replicas=2,意味着3个节点中只要有2个消息复制成功,就返回ack,而不是取决于最慢的节点
以下是 Kafka 文档中min.insync.replicas
的解释:
When a producer sets acks to "all" (or "-1"), min.insync.replicas specifies the minimum number of replicas that must acknowledge a write for the write to be considered successful. If this minimum cannot be met, then the producer will raise an exception (either NotEnoughReplicas or NotEnoughReplicasAfterAppend).
min.insync.replicas=2
的意思并不是“3个节点中只要有2个消息复制成功,就返回ack”,而是:“ISR中存在至少2个节点,才能保证消息被写入”。
这里需要明确“返回ack”的时机。
当3个节点均运行正常时,它们都会成为ISR,而request.required.acks=-1
这项配置要求所有ISR节点返回ack后,才能向producer返回ack,详见Kafka文档中关于acks
的定义:
acks=all This means the leader will wait for the full set of in-sync replicas to acknowledge the record. This guarantees that the record will not be lost as long as at least one in-sync replica remains alive. This is the strongest available guarantee. This is equivalent to the acks=-1 setting.
也就是说,ISR中3个节点都返回ack后,才能向producer返回ack。所以写入速度取决于最慢节点。
from phxqueue.
刚想问差不多的问题!期待官方解答
from phxqueue.
理解了
from phxqueue.
5.基准测试中使用的哪种语言的kafka client?如果是使用的java client,那么默认的linger.ms=0,意味着消息是实时发送的,batch不起作用,可以尝试把linger.ms调大到100、200,看看异步/同步刷盘的QPS的变化?
6.同步刷盘、不开启batch这个才是实际业务场景经常用到的,所以我比较关注在同步刷盘不开启batch时,kafka和PhxQueue在压测时瓶颈在什么地方?
from phxqueue.
感谢!
from phxqueue.
Related Issues (20)
- bash build.sh 报错 HOT 1
- make[1]: *** 没有规则可以创建“test_propose_batch”需要的目标“test_propose_batch.o”。 停止 HOT 1
- 有计划支持C#的时间表吗 HOT 27
- PhxQueue可以用于跨大洲的消息队列吗?如果可以,性能和实时性如何? HOT 2
- 是否支持延迟投递的消息 HOT 1
- make报错 error: 'BaseDispatcher' in namespace 'phxrpc' does not name a template type HOT 1
- 启动store_server 报错 HOT 1
- should be auto read_sz = fread(buf.get(), 1, fileStat.st_size, fp ); instead of auto read_sz = fread(buf.get(), fileStat.st_size, 1, fp ) ?
- phxqueue文档能否丰富下? HOT 1
- 自动build失败 HOT 1
- Branch master sha1 df6c8de, git submodule phxrpc did not contain a1b7ce5c5ae633bac3d9df85ee874a1e8a82d353 HOT 2
- 执行build.sh编译,报错 HOT 3
- 消息队列与消息总线 HOT 1
- KeepSyncThread master 5s做一次消费进度同步,主从自动切换时会不会导致重复消费? HOT 1
- phxqueue/phxqueue/comm/utils/memory_util.h
- 假如一个storeId三个节点,某一个paxos instance实例slave所在节点重启,另外一个slave数据又有落后,可能会直接导致客户端消息发送失败?
- phxqueue的运行环境
- build.sh 出错
- phxqueue/producer/producer.cpp:105中打印顺序反了导致coredump
- 问下这个开源项目还有人维护吗? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from phxqueue.