手机网站开发需要哪些人才,wordpress 区块编辑器,中国企业公司,wordpress 地方门户一、 正常工作流程 生产者发送消息到kafka集群#xff0c;然后由集群发送到消费者。 但是可能中途会出现消息的丢失。下面是解决方案。
二、 生产者发送消息到Brocker丢失
1. 设置异步发送 //同步发送RecordMetadata recordMetadata kafkaProducer.send(record).get();//异…一、 正常工作流程 生产者发送消息到kafka集群然后由集群发送到消费者。 但是可能中途会出现消息的丢失。下面是解决方案。
二、 生产者发送消息到Brocker丢失
1. 设置异步发送 //同步发送RecordMetadata recordMetadata kafkaProducer.send(record).get();//异步发送kafkaProducer.send(record,new Callback() {Override public void onCompletion (RecordMetadata recordMetadata, Exception e){if (e ! null) {System.out.println(消息发送失败 | 记录日志);}long offset recordMetadata.offset();int partition recordMetadata.partition();String topic recordMetadata.topic();}});
2.消息重试
//设置重试次数
prop.put(ProducerConfig.RETRIES_CONFIG,10);三、消息在Brocker中存储丢失 发送确认机制acks。消息首先Topic是key到达Topic以后才选择分区Partition默认就一个分区0号分区默认连接的就是分区的Leader节点由leader分区同步到follower区中。 四、消费者从Brocker接收消息丢失
1.分区机制 1. Kafka 中的分区机制指的是将每个主题划分成多个分区Partition。 2. topic分区中消息只能由消费者组中的唯一一个消费者处理不同的分区分配给不同的消费者同一个消费者组。
2.消费方式 消费者默认是自动按期提交已经消费的偏移量默认是每隔5s提交一次如果出现重平衡的情况可能会重复消费或丢失数据。 3.那如何解决重复消费 禁用自动提交偏移量改为手动 1. 同步提交。 2. 异步提交。 3. 同步异步组合提交。 五、面试题
面试官Kafka是如何保证消息不丢失
候选人嗯这个保证机制很多在发送消息到消费者接收消息在每个阶段都有可能会丢失消息所以我们解决的话也是从多个方面考虑
第一个是生产者发送消息的时候可以使用异步回调发送如果消息发送失败我们可以通过回调获取失败后的消息信息可以考虑重试或记录日志后边再做补偿都是可以的。同时在生产者这边还可以设置消息重试有的时候是由于网络抖动的原因导致发送不成功就可以使用重试机制来解决。
第二个在broker中消息有可能会丢失我们可以通过kafka的复制机制来确保消息不丢失在生产者发送消息的时候可以设置一个acks就是确认机制。我们可以设置参数为all这样的话当生产者发送消息到了分区之后不仅仅只在leader分区保存确认在follwer分区也会保存确认只有当所有的副本都保存确认以后才算是成功发送了消息所以这样设置就很大程度了保证了消息不会在broker丢失。
第三个有可能是在消费者端丢失消息kafka消费消息都是按照offset进行标记消费的消费者默认是自动按期提交已经消费的偏移量默认是每隔5s提交一次如果出现重平衡的情况可能会重复消费或丢失数据。我们一般都会禁用掉自动提价偏移量改为手动提交当消费成功以后再报告给broker消费的位置这样就可以避免消息丢失和重复消费了。
面试官Kafka中消息的重复消费问题如何解决的
候选人kafka消费消息都是按照offset进行标记消费的消费者默认是自动按期提交已经消费的偏移量默认是每隔5s提交一次如果出现重平衡的情况可能会重复消费或丢失数据。我们一般都会禁用掉自动提价偏移量改为手动提交当消费成功以后再报告给broker消费的位置这样就可以避免消息丢失和重复消费了。
为了消息的幂等我们也可以设置唯一主键来进行区分或者是加锁数据库的锁或者是redis分布式锁都能解决幂等的问题。