一些重要的参数:

1.acks指定了在给producer发送响应前,leader broker必须要确保已成功写入该消息的副本数.当前acks有3个取值,0,1,和all

2.buffer.memory:producer启动时会首先创建一块内存缓冲区用于保存待发送的消息,然后由另一个专属的线程负责从缓冲区中读取消息执行真正的发送。默认32MB。生产过快会抛异常

3.compression.type:是否压缩消息

4.retries:可重试异常充实次数,默认为0不进行重试。

5.batch.size:默认16384即16KB producer会将发往同一分区的多条消息封装进一个batch中。当batch满了之后,producer会发送batch中的所有消息。不过,producer并不总是等待batch满了才发送消息,很有可能当batch还有很多空间时producer就发送该batch。

6.linger.ms:控制消息发送延时行为,默认为0表示消息需要立即发送,无须关心batch是否已被填满

7.max.request.size:能够发送的最大消息大小.默认1048576字节

8.request.timeout.ms当producer发送请求给broker后,broker需要在规定的时间范围内将处理结果返回给producer。默认是30秒。超时回调函数显示抛出TimeoutException异常交由用户处理。

无消息丢失配置:

producer端

block.on.full=true缓冲区填满时producer处于阻塞状态并停止接受新的消息而不是抛出异常。否则producer生产速度过快会耗尽缓冲区。新版本0.10。0.0之后可以不用理会这个参数,转而设置max.block.ms即可

ack=all所有isr同步

retries=Integer.MAX_VALUE可重试异常无限重试

max.in.flight.requests.per.connection=1设置该参数为1主要是为了防止topic同分区下的消息乱序问题。这个参数实际效果其实限制了producer在单个broker连接上能够发送的未响应请求的数量,因此,如果设置成1,则producer在某个broker发送响应之前将无法再给该broker发送producer请求。

使用带回调机制的send,

在Callback的失败处理逻辑中显式调用KafkaProducer.close(0),这样做的目的是为了处理消息的乱序问题。若不使用close(0),默认情况下producer会被允许将未完成的消息发送出去,这样就可能造成消息乱序。但是这样还怎么重试????

broker配置

unclean.leader.election.enable=false关闭unclean leader选举,即不允许非isr中的副本被选举为leader,从而避免broker端因日志水位截断而造成的消息丢失。

replication.factor>=3一致性算法三备份原则

min.insync.replicas>1用于控制某条消息至少被写入到isr中的多少个副本才算成功,设置成大于1是为了提升producer端发送语义的持久性。只有在acks被设置成all或-1时这个参数才有意义。

确保replication.factor>min.insync.replicas若2者相等,那么只要有一个副本挂掉,分区就无法正常工作,虽然有很高的持久性但可用性被极大地降低了,推荐配置成replication.factor=min.insync.replicas+1

Kafka配置实例:

private KafkaTemplate<String, String> createKafkaTemplate() {
Map<String, Object> properties = new HashMap();
properties.put("bootstrap.servers", this.servers);
properties.put("acks", "0");
properties.put("retries", 1);
properties.put("batch.size", this.batchSize);
properties.put("linger.ms", 1000);
properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
return new KafkaTemplate(new DefaultKafkaProducerFactory(properties));
}

Kafka入门之producer的更多相关文章

  1. 【Kafka入门】Kafka基础结构和知识

    基本概念的总结 在基本的Kafka架构中,producer将消息发布到Kafka话题中,一个Kafka话题通常指消息的类别或者名称,Kafka话题被集群中一个充当Kafka server角色的 bro ...

  2. kafka 入门笔记 #1

    kafka 入门笔记(#1) 单机测试 下载版本,解压 tar -xzf kafka_2.11-0.10.1.1.tgz cd kafka_2.11-0.10.1.1 启动服务 Kafka用到了Zoo ...

  3. Kafka入门介绍

    1. Kafka入门介绍 1.1 Apache Kafka是一个分布式的流平台.这到底意味着什么? 我们认为,一个流平台具有三个关键能力: ① 发布和订阅消息.在这方面,它类似一个消息队列或企业消息系 ...

  4. Kafka入门 --安装和简单实用

    一.安装Zookeeper 参考: Zookeeper的下载.安装和启动 Zookeeper 集群搭建--单机伪分布式集群 二.下载Kafka 进入http://kafka.apache.org/do ...

  5. 转 Kafka入门经典教程

    Kafka入门经典教程 http://www.aboutyun.com/thread-12882-1-1.html 问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic. ...

  6. Kafka 入门和 Spring Boot 集成

    目录 Kafka 入门和 Spring Boot 集成 标签:博客 概述 应用场景 基本概念 基本结构 和Spring Boot 集成 集成概述 集成环境 kafka 环境搭建 Spring Boot ...

  7. _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)

    博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

  8. Kafka入门宝典(详细截图版)

    1.了解 Apache Kafka 1.1.简介 官网:http://kafka.apache.org/ Apache Kafka 是一个开源消息系统,由Scala 写成.是由Apache 软件基金会 ...

  9. 【转帖】Kafka入门介绍

    Kafka入门介绍 https://www.cnblogs.com/swordfall/p/8251700.html 最近在看hdoop的hdfs 以及看了下kafka的底层存储,发现分布式的技术基本 ...

随机推荐

  1. 使用Azure静态Web应用部署Blazor Webassembly应用

    上一次演示了如何使用Azure静态web应用部署VUE前端项目(使用 Azure静态web应用+Github全自动部署VUE站点).我们知道静态web应用支持VUE,react,angular等项目的 ...

  2. Flask 中的MTV架构之Models

    Flask 中的MTV架构之Models 1.Models(数据模型) 1.1 flask-sqlalchemy(数据库) ​ 说明:提供了大多数关系型数据库的支持,而且提供了ORM # 安装: pi ...

  3. Java中的常见数学运算

    1.舍掉小数取整:Math.floor(3.5)=3 2.四舍五入取整:Math.rint(3.5)=4 3.进位取整:Math.ceil(3.1)=4 4.取绝对值:Math.abs(-3.5)=3 ...

  4. 838. Push Dominoes —— weekly contest 85

    Push Dominoes There are N dominoes in a line, and we place each domino vertically upright. In the be ...

  5. Dubbo 迈出云原生重要一步 - 应用级服务发现解析

    作者 | 刘军(陆龟)  Apache Dubbo PMC 概述 社区版本 Dubbo 从 2.7.5 版本开始,新引入了一种基于实例(应用)粒度的服务发现机制,这是我们为 Dubbo 适配云原生基础 ...

  6. DCL单例模式中的缺陷及单例模式的其他实现

    DCL:Double Check Lock ,意为双重检查锁.在单例模式中懒汉式中可以使用DCL来保证程序执行的效率. 1 public class SingletonDemo { 2 private ...

  7. 三分钟快速解析GraphQL基本工作思路!

    欢迎阅读 本文会通过实际场景介绍一下 GraphQL,目的是让你快速了解 GraphQL 是什么,以及基本工作思路,不包含实际用法,所以阅读很轻松. 一.GraphQL 是什么? GraphQL 是后 ...

  8. npm的命令参数 --save-dev和 --save两者有什么区别?

    我们在安装npm包的时候经常会遇到 --save-dev 和 --save 这两个命令参数,两个命令都是往package.json文件里写入信息,两者有什么区别呢? 1. --save 会把依赖包名称 ...

  9. git commit后如何取消commit

    在git使用中要如何取消commit但是还未push的操作? 通常,我们对修改的文件会先git add .,然后git commmit -m "注释",但是如果commit错了,想 ...

  10. JS模拟百度分享侧边栏效果

    模拟百度分享侧边栏的弹出与滑入效果.当鼠标移入#div1分享侧边栏,#div1分享侧边栏区块匀速滑出直至其全部露出.当鼠标移除#div1分享侧边栏,#div1分享侧边栏区块匀速滑入隐藏,直至恢复初始位 ...