kafka数据不丢失

什么是kafka
一个开源的分布式消息队列(生产者消费者模式) ,消息队列(消息中间件)
kafka的特点
作为缓冲(流量消减),来异构、解耦系统
kafka的基本架构

Kafka Cluster:由多个服务器组成。每个服务器单独的名字broker(掮客)。
kafka broker:kafka集群中包含的服务器
Kafka Producer:消息生产者、发布消息到 kafka 集群的终端或服务。
Kafka consumer:消息消费者、负责消费数据。
Kafka Topic: 主题,一类消息的名称。存储数据时将一类数据存放在某个topic下,消费数据也是消费一类数据
注意:Kafka的元数据都是存放在zookeeper中。

kafka的基本使用
创建topic
./kafka-topics.sh --create --zookeeper node01:2181 --replication-factor 1
–partitions 1 --topic order

创建生产者
./kafka-console-producer.sh --broker-list node01:9092 --topic order

创建消费者
./kafka-console-consumer.sh --bootstrap-server node01:9092 --topic order
//该消费语句,只能获取最新的数据,要想历史数据,需要添加选项–from-beginning
如:bin/kafka-console-consumer.sh --bootstrap-server node01:9092
–from-beginning --topic order

查看topic
./kafka-topics.sh --list --zookeeper node01:2181

查看某一个具体的Topic的详细信息
./kafka-topics.sh --describe --topic order --zookeeper node01:2181

删除topic
./kafka-topics.sh --delete --topic order --zookeeper node01:2181
//注意:彻底删除一个topic,需要在server.properties中配置delete.topic.enable=true,
//否则只是标记删除 配置完成之后,需要重启kafka服务
//也可以通过zookeeper的客户端工具, 直接将topic的对应节点删除

kafka原理

kafka保证数据不丢失机制

保证生产者端不丢失
消息生产分为同步模式和异步模式
在同步模式下
生产者等待10S,如果broker没有给出ack响应,就认为失败。
生产者重试3次,如果还没有响应,就报错。
在异步模式下
先将数据保存在生产者端的buffer中。Buffer大小是2万条。
满足数据阈值或者数量(时间)阈值其中的一个条件就可以发送数据。
发送一批数据的大小是500条。
消息确认分为3个状态
生产者只负责发送数据,不管接收没接收到 0
某个分区的leader接收到数据,就给出响应 1
某个分区的所有副本都收到数据才给出响应 -1或者all

broker端消息不丢失
broker端的消息不丢失,其实就是用partition副本机制(高可用)来保证。
Producer ack -1(all). 能够保证所有的副本都同步好了数据。其中一台机器挂了,并不影响数据的完整性

消费端消息不丢失
通过offset commit 来保证数据的不丢失,kafka自己记录了每次消费的offset数值,下次继续消费的时候,会接着 上次的offset进行消费。

设置offset有3种方式:
从0开始获取数据,或获取到历史的数据
获取最新的数据
自定义offset来获取数据

生产者数据分发策略
如果是用户制定了partition,生产就不会调用DefaultPartitioner.partition()方法, 数据分发策略的时候,可以指定数据发往哪个partition
当用户指定key,使用hash算法。如果key一直不变,同一个key算出来的hash值是个固定值。如果是固定值, 这种hash取模就没有意义。
当用户既没有指定partition也没有key,使用轮询的方式发送数据

kafka阻塞排错步骤
1.首先获取所有的topic的列表
bin/kafka-topics.sh --list --zookeeper localhost:2181
2.查看某一个topic下的log文件和offset是不是一样(下一单之后再次查看有没有变化,应该是log文件和offset同时加1才对,如果不是同时加1说明阻塞)
bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper localhost:2181 --group cxx_system --topic cxx_subs_topic
3.如果发生阻塞可以通过重启kafka来解决
首先关闭zookeeper,再关闭kafka,然后开启zookeeper,在开启kafka(注意顺序和集群的时候,如果是集群的情况记得都要开启)

其他说明:
查看某一个topic的状态
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic topic某一个名字
获取关于某一个topic的所有的记录(注意:有可能获取获取不到值,是因为offset是非法排序的所以获取不到值)
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic topic某一个名字 --from-beginning

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值