Kafka之sync、async以及oneway
来源:互联网 发布:德力西 知乎 编辑:程序博客网 时间:2024/04/20 07:33
kafka有同步(sync)、异步(async)以及oneway这三种发送方式,某些概念上区分也可以分为同步和异步两种,同步和异步的发送方式通过“producer.type”参数指定,而oneway由“request.require.acks”参数指定。
1. sync vs async
在官方文档Producer Configs中有如下:
翻译过来就是:
producer.type的默认值是sync,即同步的方式。这个参数指定了在后台线程中消息的发送方式是同步的还是异步的。如果设置成异步的模式,可以运行生产者以batch的形式push数据,这样会极大的提高broker的性能,但是这样会增加丢失数据的风险。
对于异步模式,还有4个配套的参数,如下:
以batch的方式推送数据可以极大的提高处理效率,kafka producer可以将消息在内存中累计到一定数量后作为一个batch发送请求。batch的数量大小可以通过producer的参数(batch.num.messages)控制。通过增加batch的大小,可以减少网络请求和磁盘IO的次数,当然具体参数设置需要在效率和时效性方面做一个权衡。在比较新的版本中还有batch.size这个参数。
2. 题外话:
producers可以一步的并行向kafka发送消息,但是通常producer在发送完消息之后会得到一个响应,返回的是offset值或者发送过程中遇到的错误。这其中有个非常重要的参数“request.required.acks”,这个参数决定了producer要求leader partition收到确认的副本个数,如果acks设置为0,表示producer不会等待broker的相应,所以,producer无法知道消息是否发生成功,这样有可能导致数据丢失,但同时,acks值为0会得到最大的系统吞吐量。若acks设置为1,表示producer会在leader partition收到消息时得到broker的一个确认,这样会有更好的可靠性,因为客户端会等待知道broker确认收到消息。若设置为-1,producer会在所有备份的partition收到消息时得到broker的确认,这个设置可以得到最高的可靠性保证。
3. oneway
前面只提到了sync和async,那么oneway是什么呢?
oneway是只顾消息发出去而不管死活,消息可靠性最低,但是低延迟、高吞吐,这种对于某些完全对可靠性没有要求的场景还是适用的,即request.required.acks设置为0。
4. 一般配置
对于sync的发送方式:
producer.type=sync
request.required.acks=1
对于async的发送方式:
producer.type=async
request.required.acks=1
queue.buffering.max.ms=5000
queue.buffering.max.messages=10000
queue.enqueue.timeout.ms = -1
batch.num.messages=200
对于oneway的发送发送:
producer.type=async
request.required.acks=0
- Kafka之sync、async以及oneway
- 刀哥多线程之gcd-01-sync&async
- Sync & ASync
- Half-Sync/Half-Async
- Async vs sync benchmark
- 网络分析之Oneway和连通性
- directio,dsync & sync , async IO
- ASP.NET sync over async
- 网络分析之单行线Oneway和连通性
- mina中Half Sync/Half Async模式
- Asp.Net Sync & ASync Processing request
- GCD dispatch async / dispatch sync 介绍 。
- HttpClient实现同步(sync)和异步(Async)
- Kafka学习之五 Kafka架构以及设计原理
- 设计模式 - 半同步半异步(Half-Sync/Half-Async)
- 【Verilog】 同步复位和异步复位比较 async vs. sync
- 数据库Standby中的几个概念 - LGWR, ARCH,ASYNC,SYNC,AFFIRM
- Half-Sync/Half-Async和Leader/Followers模式
- LeetCode 16. 3Sum Closest
- CSS基础{精灵图、梅兰商贸}
- 第五周练习计划
- 三维几何,四面体(压纸器,LA 4795)
- JavaScript 实现面向对象(入门)
- Kafka之sync、async以及oneway
- eclipse的代码不全功能
- CentOS下使用yum安装Mysql,以及Mysql主从复制的配置
- 两字符串比较函数
- TensorFlow下MNIST数据集下载脚本input_data.py
- 410. Split Array Largest Sum
- 如何创建一个最简单的Windows桌面应用程序 (C++)
- <机器学习>(周志华)读书笔记 -- 第一章 绪论
- windows下安装python的numpy模块