Kafka 生产者无消息丢失配置

prodcer同步发送的机制虽然能保证消息不丢失,但是不推荐生产环境使用,性能很差。
一般都是采用异步方式发送消息,把消息先放入缓冲区,然后再由IO线程推送出去,存在消息丢失的风险,而且可能发生乱序。

下面给出Kafka无消息丢失的配置:

Producer端配置

  1. block.on.buffer.full = true
    0.9版本后已经废弃,改用max.block.ms代替,推荐用户显示设置为true,使得缓冲期填满时,producer处于阻塞状态并停止接收新的消息而不是抛出异常。
  2. acks = all
    保证消息写入所有ISR集合,才能确认提交确认成功
  3. retries = Integer.MAX_VALUE
    开启无限重试,当前producer只会重试那些可恢复的异常情况,所以放心的设置为一个较大的值
  4. max.in.flight.requests.per.connection=1
    主要防止topic同分区下的消息乱序问题,这个参数实际上限制了producer在单个broker连接上能够发送的未响应请求的数量。
  5. 使用带有回调机制的send
  6. Callback逻辑中显示关闭producer,显示调用kafkaProducer.close(0);

Broker端的配置

    1. unclean.leader.election.enable = false
      关闭unclean选举,不允许非ISR的副本被选举为Leader,从而避免broker端因日志水位截断造成的消息丢失
    2. replication.factor >=3
      参考了Hadoop以及业界的三备份原则
    3. min.insync.replicas > 1
      用于控制某条消息至少被写入ISR中多少个副本才算成功。设置大于1
    4. 确保replication.factor > min.insync.replicas
      若两者相等,那么只要一个副本挂掉,分区就无法工作。推荐replication.factor = min.insync.replicas + 1

原文地址:https://www.cnblogs.com/fubinhnust/p/11967907.html

时间: 2024-11-08 09:57:04

Kafka 生产者无消息丢失配置的相关文章

Kafka 系列(三)—— Kafka 生产者详解

一.生产者发送消息的过程 首先介绍一下 Kafka 生产者发送消息的过程: Kafka 会将发送消息包装为 ProducerRecord 对象, ProducerRecord 对象包含了目标主题和要发送的内容,同时还可以指定键和分区.在发送 ProducerRecord 对象前,生产者会先把键和值对象序列化成字节数组,这样它们才能够在网络上传输. 接下来,数据被传给分区器.如果之前已经在 ProducerRecord 对象里指定了分区,那么分区器就不会再做任何事情.如果没有指定分区 ,那么分区器

Kafka生产者——重要参数配置

目录 acks max.request.size retries和retry.backoff.ms connections.max.idele.ms linger.ms receive.buffer.bytes send.buffer.bytes request.timeout.ms enable.idempotence bootstrap.servers acks 这个参数用老指定分区中必须由多少个副本收到消息,之后生产者才会认为这条消息写入是成功的.acks参数有三种类型的值(都是字符串类型

Kafka在高并发的情况下,如何避免消息丢失和消息重复?kafka消费怎么保证数据消费一次?数据的一致性和统一性?数据的完整性?

1.kafka在高并发的情况下,如何避免消息丢失和消息重复? 消息丢失解决方案: 首先对kafka进行限速, 其次启用重试机制,重试间隔时间设置长一些,最后Kafka设置acks=all,即需要相应的所有处于ISR的分区都确认收到该消息后,才算发送成功 消息重复解决方案: 消息可以使用唯一id标识 生产者(ack=all 代表至少成功发送一次) 消费者 (offset手动提交,业务逻辑成功处理后,提交offset) 落表(主键或者唯一索引的方式,避免重复数据) 业务逻辑处理(选择唯一主键存储到R

kafka集群安装与配置

一.集群安装 1. Kafka下载: 可以从kafka官方网站(http://kafka.apache.org)上找到下载地址,再wgetwget http://mirrors.cnnic.cn/apache/kafka/0.8.2.2/kafka_2.10-0.8.2.2.tgz 解压该文件: tar zxvf kafka_2.10-0.8.2.2.tgz 注意kafka依赖于zookeeper和scala,以上tgz文件名中的2.10即为scala的版本号 zk和scala的安装在此不再赘述

Kafka生产者——结合spring开发

目录 Kafka生产者端 可靠性保证: spring-kafka生产端 Kafka生产者端 可靠性保证: producer向broker发送消息数据,需要有一定的可靠性,至少要保证数据: 1.不丢失 2.不重复 producer提供了一些参数,在编写producer是进行合理设置和编写,就可以保证数据的可靠性. acks 参数配置 为保证producer发送的数据能够可靠的发送到指定topic,topic的每个partition收到消息后,都需要向producer发送ack(acknowledg

KafKa集群安装、配置

一.事前准备 1.kafka官网:http://kafka.apache.org/downloads. 2.选择使用版本下载. 3.kafka集群环境准备:(linux) 192.168.145.129   主机名:kafka01 192.168.145.130              kafka02 192.168.145.131              kafka03 4.本次安装版本:kafka_2.10-0.8.2.0 5.注意事项 ①:kafka依赖zookeeper集群. ②:集

RabbitMQ-从基础到实战(2)— 防止消息丢失

未经允许,禁止转载! 1.简介 RabbitMQ中,消息丢失可以简单的分为两种:客户端丢失和服务端丢失.针对这两种消息丢失,RabbitMQ都给出了相应的解决方案. 2.防止客户端丢失消息 如图,生产者P向队列中生产消息,C1和C2消费队列中的消息,默认情况下,RabbitMQ会平均的分发消费给C1C2(Round-robin dispatching),假设一个任务的执行时间非常长,在执行过程中,客户端挂了(连接断开),那么,该客户端正在处理且未完成的消息,以及分配给它还没来得及执行的消息,都将

java实现Kafka生产者示例

使用java实现Kafka的生产者 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 package com.lisg.kafkatest; import

MQ在高并发环境下,如果队列满了,如何防止消息丢失?

1.为什么MQ能解决高并发环境下的消息堆积问题? MQ消息如果堆积,消费者不会立马消费所有的消息,不具有实时性,所以可以解决高并发的问题. 性能比较好的消息中间件:Kafka.RabbitMQ,RocketMQ. 2.什么情况下会产生消息丢失的现象? 消息队列满了的情况下. 3.如何解决消息丢失的问题? (1)生产者可以采用重试机制.因为消费者会不停的消费消息,可以重试将消息放入队列. 如果还是不行,可以将消息记录到数据库,后期做补偿.(不太推荐,不方便) (2)死信队列,可以理解为备胎.(推荐