kafka
文章平均质量分 69
快快乐乐#
这个作者很懒,什么都没留下…
展开
-
Kafka一些非比寻常的坑
前言我的上家公司是做餐饮系统的,每天中午和晚上用餐高峰期,系统的并发量不容小觑。为了保险起见,公司规定各部门都要在吃饭的时间轮流值班,防止出现线上问题时能够及时处理。我当时在后厨显示系统团队,该系统属于订单的下游业务。 用户点完菜下单后,订单系统会通过发 Kafka 消息给我们系统; 系统读取消息后,做业务逻辑处理,持久化订单和菜品数据,然后展示到划菜客户端; 这样厨师就知道哪个订单要做哪些菜,有些菜做好了,就可以通过该系统出菜; 系统自动通知服务员上菜;原创 2022-03-02 17:07:21 · 564 阅读 · 0 评论 -
Kafka 宕机后不再高可用?探究 Kafka 高可用实现
问题出在了 __consumer_offset 上, __consumer_offset 是一个 Kafka 自动创建的 Topic,用来存储消费者消费的 offset (偏移量)信息,默认 Partition 数为50。而就是这个Topic,它的默认副本数为1。如果所有的 Partition 都存在于同一台机器上,那就是很明显的单点故障了!当将存储 __consumer_offset 的 Partition 的 Broker 给 Kill 后,会发现所有的消费者都停止消费了。第一点 ,需要将 __原创 2022-02-25 14:35:11 · 1152 阅读 · 0 评论 -
消息重复消费及消息丢失解决办法
解决办法: 针对消息丢失:同步模式下,确认机制设置为-1,即让消息写入Leader和Follower之后再确认消息发送成功;异步模式下,为防止缓冲区满,可以在配置文件设置不限制阻塞超时时间,当缓冲区满时让生产者一直处于阻塞状态; 针对消息重复:将消息的唯一标识保存到外部介质中,每次消费时判断是否处理过即可。...原创 2022-02-25 09:35:29 · 1112 阅读 · 0 评论 -
kafka笔记之如何保证数据不丢失
kafka笔记之如何保证数据不丢失Kafka是一种高吞吐量的分布式发布订阅消息系统。在使用过程中如果使用不当,经常会出现消息丢失的情况,这是业务系统不能容忍的,消息系统最重要的是保证数据不丢失。本文主要记录kafka是如何保证数据不丢失的,主要从三方面来介绍,消息发送端保证数据不丢失,kafka服务保证消息不丢失,消费者保证消息不丢失。基础知识kafka 可以保证分区消息的顺序,同一个分区,先发送到kafka分区的消息,会被先消费掉。 kafka 是通过一个集群对外提供服务,只要是集群中多个副本原创 2021-10-26 17:40:56 · 423 阅读 · 0 评论 -
Kafka如何保证数据可靠性
Kafka的数据可靠性保证副本数据同步策略ISR机制ack应答机制故障处理:HW、LEO副本数据同步策略两种副本数据同步策略(Kafka选择第二种)方案 优点 缺点 半数以上完成同步,就发送ack 延迟低 选举新的leader时,容忍n台节点的故障,需要2n+1个副本 全部完成同步,才发送ack 选举新的leader时,容忍n台节点的故障,需要n+1个副本 延迟高 Kafka选择了第二种方案,原因如下:为了容忍n台节点的故障,第一种方案需要2n+1个副本,而第二种方案只需.原创 2021-10-26 17:39:24 · 1271 阅读 · 0 评论 -
kafka系列(15):集群配置参数server.properties
offsets.topic.replication.factor=3解释:该值默认为1。表示kafka的内部topic consumer_offsets副本数。当该副本所在的broker宕机,consumer_offsets只有一份副本,该分区宕机。使用该分区存储消费分组offset位置的消费者均会收到影响,offset无法提交,从而导致生产者可以发送消息但消费者不可用。所以需要设置该字段的值大于1。...原创 2021-05-28 10:13:54 · 4188 阅读 · 0 评论 -
kafka系列(13):kafka 工作机制、处理请求的内部机制
处理请求的内部机制 broker 的大部分工作是处理客户端、分区副本和控制器发送给分区首领的请求。 Kafka 提供了一个二进制协议(基于 TCP),指定了请求消息的格式以及 broker 如何对请求作出响应——包括成功处理请求或在处理请求过程中遇到错误。 客户端发起连接并发送请求,broker 处理请求并作出响应。 broker 按照请求到达的顺序来处理它们这种顺序保证让 Kaka 具有了消息队列的特性,同时 保证保存的消息也是有序的。 所有的请求消息都...原创 2021-05-28 09:13:59 · 273 阅读 · 0 评论 -
kafka系列(12):kafka复制-Kafka 的核心、副本类型
复制-Kafka 的核心 复制功能是 Kafka 架构的核心。在 Kafka 的文档里, Kafka 把自己描述成“一个分布式的、可分区的、可复制的提交日志服务”。复制之所以这么关键, 是因为它可以在个别节点失效时仍能保证 Kafka 的可用性和持久性。 Kafka 使用主题来组织数据, 每个主题被分为若干个分区,每个分区有多个副本。那些副本被保存在 broker 上, 每个 broker 可以保存成百上千个属于 不同主题和分区的副本。...原创 2021-05-28 09:06:20 · 310 阅读 · 0 评论 -
kafka系列(11):kafka集群的成员关系、控制器
集群的成员关系Kafka 使用 zookeeper 来维护集群成员的信息。每个 broker 都有个唯一标识符, 这个标识符可以在配置文件里指定, 也可以自动生成。 在 broker 启 动的时候, 它通过创建临时节点把自己的 ID 注册到 zoo-keeper。 Kafka 组件订阅 Zookeeper 的/brokers/ids 路径(broker 在 zookeeper 上的注册路径) , 当 有 broker 加入集群或退出集群时, 这些组件就可以获得通知 。 如果你要启动另一个具有相同 ID原创 2021-05-28 09:03:55 · 268 阅读 · 0 评论 -
kafka系列(14):kafka物理存储机制、分区分配
1.kafka分区机制分区机制是kafka实现高吞吐的秘密武器,但这个武器用得不好的话也容易出问题,今天主要就来介绍分区的机制以及相关的部分配置。首先,从数据组织形式来说,kafka有三层形式,kafka有多个主题,每个主题有多个分区,每个分区又有多条消息。而每个分区可以分布到不同的机器上,这样一来,从服务端来说,分区可以实现高伸缩性,以及负载均衡,动态调节的能力。当然多分区就意味着每条消息都难以按照顺序存储,那么是不是意味着这样的业务场景kafka就无能为力呢?不是的,最简单的做法可以使用原创 2021-05-27 11:04:42 · 374 阅读 · 0 评论 -
kafka系列(10):Kafka生产者事务和幂等性
1 生产者幂等性1.1 引入幂等性引入目的:生产者重复生产消息。生产者进行retry会产生重试时,会重复产生消息。有了幂等性之后,在进行retry重试时,只会生成一个消息。1.2 幂等性实现1.2.1 PID 和 Sequence Number为了实现Producer的幂等性,Kafka引入了Producer ID(即PID)和Sequence Number。PID。每个新的Producer在初始化的时候会被分配一个唯一的PID,这个PID对用户是不可见的。 Sequence N原创 2021-05-24 08:22:22 · 464 阅读 · 0 评论 -
kafka系列(09):SpringBoot 中使用@KafkaListener详解与使用
说明从2.2.4版开始,您可以直接在注释上指定Kafka使用者属性,这些属性将覆盖在使用者工厂中配置的具有相同名称的所有属性。您不能通过这种方式指定group.id和client.id属性。他们将被忽略;可以使用#{…}或属性占位符(${…})在SpEL上配置注释上的大多数属性。比如:@KafkaListener(id = "consumer-id",topics = "SHI_TOPIC1",concurrency = "${listen.concurrency:3}", .原创 2021-05-20 10:12:51 · 10836 阅读 · 1 评论 -
kafka系列(08):Kafka的消费者
消费者的入门消费者的含义,同一般消息中间件中消费者的概念。在高并发的情况下,生产者产生消息的速度是远大于消费者消费的速度,单个消费者很可能会 负担不起,此时有必要对消费者进行横向伸缩,于是我们可以使用多个消费者从同一个主题读取消息,对消息进行分流。(买单的故事,群组,消费者的一群人, 消费者:买单的,分区:一笔单,一笔单能被买单一次,当然一个消费者可以买多个单,如果有一个消 费者挂掉了,另外的消费者接上)消费者群组Kafka 里消费者从属于消费者群组,一个群组里的消费者订阅的都是同一个.原创 2021-05-19 14:00:35 · 773 阅读 · 0 评论 -
kafka系列(07):Kafka 的生产者
产者发送消息的基本流程从创建一个 ProducerRecord 对象开始, Producer Record 对象需要包含目标主题和要发送的内容。我们还可以指定键或分区。在发送 ProducerRecord 对象时,生产者要先把键和值对象序列化成字节数组,这样它们才能够在网络上传输。接下来,数据被传给分区器。如果之前在 Producer Record 对象里指定了分区,那么分区器就不会再做任何事情,直接把指定的分区返回。如果没有 指定分区,那么分区器会根据 Producer Record 对象的键原创 2021-05-19 11:12:56 · 329 阅读 · 0 评论 -
kafka系列(06):Kafka 的集群
为何需要 Kafka 集群本地开发,一台 Kafka 足够使用。在实际生产中,集群可以跨服务器进行负载均衡,再则可以使用复制功能来避免单独故障造成的数据丢失。同时集 群可以提供高可用性。如何估算 Kafka 集群中 Broker 的数量要估量以下几个因素:需要多少磁盘空间保留数据,和每个 broker 上有多少空间可以用。比如,如果一个集群有 10TB 的数据需要保留,而每个 broker 可以存储 2TB,那么 至少需要 5 个 broker。如果启用了数据复制,则还需要一倍的空...原创 2021-05-19 11:04:45 · 317 阅读 · 0 评论 -
kafka系列(05):Kafka 的安装、管理和配置
kafka 基本的操作和管理##列出所有主题kafka-topics.bat --zookeeper localhost:2181 --list##列出所有主题的详细信息kafka-topics.bat --zookeeper localhost:2181 --describe##创建主题 主题名 my-topic,1 副本,8 分区kafka-topics.bat --zookeeper localhost:2181 --create --topic my-topic --repl原创 2021-05-19 08:32:48 · 370 阅读 · 1 评论 -
kafka系列(04):Kafka分区和副本机制理解
1.kafka分区机制分区机制是kafka实现高吞吐的秘密武器,但这个武器用得不好的话也容易出问题,今天主要就来介绍分区的机制以及相关的部分配置。首先,从数据组织形式来说,kafka有三层形式,kafka有多个主题,每个主题有多个分区,每个分区又有多条消息。而每个分区可以分布到不同的机器上,这样一来,从服务端来说,分区可以实现高伸缩性,以及负载均衡,动态调节的能力。当然多分区就意味着每条消息都难以按照顺序存储,那么是不是意味着这样的业务场景kafka就无能为力呢?不是的,最简单的做法可以使用原创 2021-05-18 18:04:07 · 359 阅读 · 0 评论 -
kafka系列(02):kafka架构以及应用场景
什么是kafkaApache Kafka是一个分布式发布,订阅消息系统,并且也是一个强大的队列,可以处理高并的数据,并使您能够将消息从一个端点传递到另一个端点。Kafka非常适合处理离线和在线消息消费。 Kafka消息可以持久化的保留在磁盘上,并在群集内复制以防止数据丢失。 Kafka构建在ZooKeeper同步服务之上,用Raft协议保证集群的高可用, 它与Apache Storm和Spark非常好地集成,用于实时流式数据分析。...原创 2021-05-18 17:08:27 · 485 阅读 · 2 评论 -
kafka系列(03):kafka中的基本概念
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。简单地说,Kafka就相比是一个邮箱,生产者是发送邮件的人,消费者是接收邮件的人,Kafka就是用来存东西的,只不过它提供了一些处理邮件的机制。一、Kafka的优势如下: 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒; 可扩展性:kafka集群支持热扩展; 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;...原创 2021-05-18 16:59:34 · 337 阅读 · 0 评论 -
kafka系列(01):消息中间件选型分析
MQ消息队列的技术应用主要用于解耦、异步、削峰优劣比较 ActiveMQ RabbitMQ RocketMQ Kafka 性能(单台) 6000+ 万级(12000+) 十万级 百万级 消息持久化 支持 支持 .原创 2021-05-18 11:30:59 · 348 阅读 · 1 评论 -
springboot kafka批量消费
配置/** * @ClassName KafkaConsumerConfig * @Description 这里描述 * @Author admin * @Date 2021/2/25 15:02 */@Configurationpublic class KafkaConsumerConfig { @Value("${spring.kafka.consumer.bootstrap-servers}") private String servers; @Val.原创 2021-03-08 10:07:59 · 875 阅读 · 0 评论 -
springboot kafka发送消息支持成功失败通知
springboot集成kafka是比较简单的是事情,但是kafka发送消息的失败回调在日常工作中,如果不容忍消息丢失的话,发送失败需要再次发送或者放到数据库中用任务重推。以下是演示用的发送类代码 kafkaTemplate.send(topic, JSON.toJSONString(jsonObject)).addCallback(new ListenableFutureCallback<SendResult<String, String>>() {原创 2021-03-08 10:05:25 · 1855 阅读 · 0 评论 -
kafka多个consumer同时消费一个topic数据
需求:一个topic消息队列设置3个partitions分区,设置一个group组中3个consumer进行消费注意点:一个group中的consumer数 需小于 topic中的partitions分区数(一个partitions只能被一个consumer进行消费;一个consumer可以消费多个partitions)kafka命令: 查看topic详情:./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --top...原创 2021-03-01 19:36:56 · 3656 阅读 · 0 评论