Kafka入门之producer

一些重要的参数:
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的更多相关文章
- 【Kafka入门】Kafka基础结构和知识
基本概念的总结 在基本的Kafka架构中,producer将消息发布到Kafka话题中,一个Kafka话题通常指消息的类别或者名称,Kafka话题被集群中一个充当Kafka server角色的 bro ...
- kafka 入门笔记 #1
kafka 入门笔记(#1) 单机测试 下载版本,解压 tar -xzf kafka_2.11-0.10.1.1.tgz cd kafka_2.11-0.10.1.1 启动服务 Kafka用到了Zoo ...
- Kafka入门介绍
1. Kafka入门介绍 1.1 Apache Kafka是一个分布式的流平台.这到底意味着什么? 我们认为,一个流平台具有三个关键能力: ① 发布和订阅消息.在这方面,它类似一个消息队列或企业消息系 ...
- Kafka入门 --安装和简单实用
一.安装Zookeeper 参考: Zookeeper的下载.安装和启动 Zookeeper 集群搭建--单机伪分布式集群 二.下载Kafka 进入http://kafka.apache.org/do ...
- 转 Kafka入门经典教程
Kafka入门经典教程 http://www.aboutyun.com/thread-12882-1-1.html 问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic. ...
- Kafka 入门和 Spring Boot 集成
目录 Kafka 入门和 Spring Boot 集成 标签:博客 概述 应用场景 基本概念 基本结构 和Spring Boot 集成 集成概述 集成环境 kafka 环境搭建 Spring Boot ...
- _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)
博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...
- Kafka入门宝典(详细截图版)
1.了解 Apache Kafka 1.1.简介 官网:http://kafka.apache.org/ Apache Kafka 是一个开源消息系统,由Scala 写成.是由Apache 软件基金会 ...
- 【转帖】Kafka入门介绍
Kafka入门介绍 https://www.cnblogs.com/swordfall/p/8251700.html 最近在看hdoop的hdfs 以及看了下kafka的底层存储,发现分布式的技术基本 ...
随机推荐
- python基础三:函数
def name(参数1,参数2,参数3,...) 可以自定义一些自己需要的函数来简化自己的工作. 如:自定义一个计算函数 def mycount(a,b,c): y=a+b-c return y ...
- 【转】Setting up SDL 2 on Visual Studio 2019 Community
FROM: http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/msvc2019/index.php Setting up SDL 2 on V ...
- kubelet拉取pause镜像报错pull access denied for 172.20.59.190:81/kubernetes/pause-amd64, repository does not exist or may require 'docker login': denied
目录 1 背景说明 2 现象 pod无法启动,一直显示ContainerCreating 3 问题分析 kubelet的启动参数如下 4 尝试的解决方法 4.1 本地docker login登录镜像仓 ...
- 企业级docker-registry原生镜像仓库高可用部署
简介: 私有镜像仓库可以方便企业,或个人开发者共享内部镜像而不会泄漏私有代码,而且可以加速镜像的拉取.能更加方便得集成到容器化的 CI/CD 中去.也可建立自己的公共镜像仓库. 优势: Docker ...
- Python爬虫之多线程
详情点我跳转 关注公众号"轻松学编程"了解更多. 多线程 在介绍Python中的线程之前,先明确一个问题,Python中的多线程是假的多线程! 为什么这么说,我们先明确一个概念,全 ...
- Hadoop高可用
一.原因 - NameNode是HDFS的黑心配置HDFS有事hadoop的核心组件 NameNode 在Hadoop及群众至关重要 - NameNode的宕机导致集群的不可用 二.解决方案 其中 N ...
- 关于DevOps的七大误解,99%的人都曾中过招!
[摘要] DevOps方法可以为组织带来显著的积极影响,降低成本.提高效率,使开发团队的工作更加精简.为了掌握这个过程的优势,有必要认识到DevOps是什么.不是什么.在本文中,就将讨论一些流传甚广的 ...
- 电脑查看当前自己的wifi密码
菜单+R 输入control 点击确认.
- 别走!这里有个笔记:图文讲解 AQS ,一起看看 AQS 的源码……(图文较长)
前言 AbstractQueuedSynchronizer 抽象队列同步器,简称 AQS .是在 JUC 包下面一个非常重要的基础组件,JUC 包下面的并发锁 ReentrantLock CountD ...
- 「SCOI2012」喵星球上的点名
「SCOI2012」喵星球上的点名 先咕着,扔个code跑路 code #include<bits/stdc++.h> #define vec vector #define iter it ...