ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

kafka(3)

2022-08-19 23:35:03  阅读:134  来源: 互联网

标签:副本 生产者 分区 写入 kafka 消息


1.kafka 保证消息的顺序性: 

  1.一个topic 只对应一个分区   2.发送消息的时候指定 key/partition   2.如何保障kafka数据不丢失:   kafka 消息不丢失:   生产端: 1.发送一条消息,调用send方法,会出现回调。如果失败可以重试; 2.参数ack设置,可试着为all,所有副本都落数据,才算成功。   代理端: 1.min.insync.replicas 参数设置,写入的数据等于参数个,才算写入成功。 2.失败重试机制。   消费端: 1.可以设置为手动提交offset,-- 当消息消费成功后手动提交。     kafka 数据发送一条消息       分区 -->多副本机制       生产者,消费者只跟leader副本交互。     acks = all 所有副本都要接受该消息后,才算真正的成功。     默认 acks =1 产生的数据被leader 接受 就算成功。     参数设置,不能完全保证消息不丢失,因为可能回存在网络抖动或者leader节点挂掉的情况触发重新选举,如果选举的成为leader的节点的高水位,没有最新数据,可能数据就毁丢失,参数的设置只能提高消息不丢失的概率,不能完全保障。     3.生产者设计概要:   1.首先,我们需要创建一个 ProducerRecord,这个对象需要包含消息的主题(topic)和值(value),可以选择性指定一个键值(key)或者分区(partition)。   2.发送消息时,生产者会对键值和值序列化成字节数组,然后发送到分配器(partitioner)。   3.如果我们指定了分区,那么分配器返回该分区即可;否则,分配器将会基于键值来选择一个分区并返回。   4.选择完分区后,生产者知道了消息所属的主题和分区,它将这条记录添加到相同主题和分区的批量消息中,另一个线程负责发送这些批量消息到对应的 Kafka broker。   5.当broker接收到消息后,如果成功写入则返回一个包含消息的主题、分区及位移的 RecordMetadata 对象,否则返回异常。   6.生产者接收到结果后,对于异常可能会进行重试。

 

 

消息的发送:

1.template.send 发送消息体 2.封装成 消费实体记录bean ProducerRecord 3.doSend --> ProducerRecord 4.创建生产者 getTheProducer 5.初始化一个列表 final SettableListenableFuture<sendresult<k, v="">> 6.异步线程发送消息

代码:

  getTheProducer().send( producerRecord, new Callback() {

    @Override

    public void onCompletion(RecordMetadata metadata, Exception exception) {

       } });

    if (this.autoFlush) {

      flush();

    }

}

 

4.消费者概要:    我们可以增加消费者来进行水平扩展提升消费者能力,消费者的的数据不应该多于生产者(分区的意思,生产者是brocker上),多的会空闲。 kafka的一个重要特性就是,写入一次消息,可以支持任意多的应用读取这个消息。 如果需要读取用户全量数据,需要创建消费者组;   消费组和分区重平衡: 在重平衡的过程中,所有的消费者都不能消费消息,因此会造成整个消费组短暂的不可用。   partition和消费模型 partition 会为每个consumer Group 保存一个偏移量,记录group消费的位置。     5.为什么kafka是pull模型   producer 向 broker push消息   consumer 从broker pull消息   可以逐条消费也可以批量消费   6.kafka如何保持可靠性 Kafka 中的可靠性保证有如下四点:   1.对于一个分区来说,它的消息是有序的。如果一个生产者向一个分区先写入消息A,然后写入消息B,那么消费者会先读取消息A再读取消息B。   2.当消息写入所有in-sync状态的副本后,消息才会认为已提交(committed)。这里的写入有可能只是写入到文件系统的缓存,不一定刷新到磁盘。   生产者可以等待不同时机的确认,     比如等待分区主副本写入即返回,后者等待所有in-sync状态副本写入才返回。   3.一旦消息已提交,那么只要有一个副本存活,数据不会丢失。   4.消费者只能读取到已提交的消息

 

 

 

 

 

 

 

标签:副本,生产者,分区,写入,kafka,消息
来源: https://www.cnblogs.com/dhdnm/p/16606878.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有