kafka学习笔记(一)

1. kafka介绍

Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。

2. kafka配置文件

server.properties

############################# Server Basics #############################
# broker的id,  这个id是唯一的,而且必须是整数. 
broker.id=0

# 设置可以删除topic , 默认不可以删除topic
delete.topic.enable=true
############################# Socket Server Settings #############################
# Kafka Server使用的协议、主机名以及端口,默认是PLAINTEXT
listeners=PLAINTEXT://:9092

# 处理网络请求的线程数量
num.network.threads=3

# 用来处理磁盘io的线程数量
num.io.threads=8

# 发送socket的缓冲区大小
socket.send.buffer.bytes=102400

# 接受socket的缓冲区大小
socket.receive.buffer.bytes=102400

# 请求socket的缓冲区大小
socket.request.max.bytes=104857600
############################# Log Basics #############################
# 暂存数据的目录
log.dirs=E:\kafka\logs

# topic在当前broker的分区个数
num.partitions=1

# 用来恢复和清理data的线程数量
num.recovery.threads.per.data.dir=1
############################# Internal Topic Settings  #############################
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
############################# Log Flush Policy #############################
# 每隔多少个消息触发次flush操作,将内存中的消息刷新到硬盘上
log.flush.interval.messages=10000

# 每隔多少毫秒触发一次flush操作,将内存中的消息刷新到硬盘上
log.flush.interval.ms=1000
############################# Log Retention Policy #############################
# 日志保存多少个小时以后会被删除
log.retention.hours=168

# 当剩余空间低于log.retention.bytes字节,则开始删除1og
#log.retention.bytes=1073741824

# log文件最大的大小,超过会创建一个新文件,文件名称是最小的偏移量
log.segment.bytes=1073741824

# 每隔多少ms, logcleaner线程将检查一次,看是否符合上述保留策略的消息可以被删除
log.retention.check.interval.ms=300000
############################# Zookeeper #############################
# zookeeper启动地址
zookeeper.connect=localhost:2181

# 连接zookeeper的超时时长
zookeeper.connection.timeout.ms=6000
############################# Group Coordinator Settings #############################
group.initial.rebalance.delay.ms=0

3. 使用kafka创建topic

1. 查看所有topic --list
kafka-topics.bat  --zookeeper localhost:2181(zk的地址) --list

--zookeeper: zk的地址

2. 创建topic  --create
kafka-topics.bat --zookeeper localhost:2181 --create --replication-factor 1 --partitions 1 --topic test
 
--replication-factor  定义副本数 Broker小于设置的replication-factor的时候会报错
--partitions 定义分区数
--topic 创建topic的名称

3. 查看某个topic的详情  --describe
kafka-topics.bat --zookeeper localhost:2181 --describe --topic test

4. 删除topic  --delete  如果没有设置为true,不会删除成功
kafka-topics.bat --zookeeper localhost:2181 --delete --topic test  

5. 开启生产者
kafka-console-producer.bat --broker-list localhost:9092 --topic test

--broker-list 是连接hadoop的集群地址

6. 开启消费者
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

--bootstrap-server  kafka集群地址
--from-beginning   从头读取数据

4. kafka的一些名词解释

producer:消息的生产者

Consumer:消息的消费者,consumer每次会将消费的offset存在broker中,在consumer中会有一个长轮询一直去topic中拉取数据。

broker:类似一个服务器,一个kafka中有多个broker。

topic:主题,消息将会存在每个对应的topic中,每个topic会有多个分区,每个分区会有一个leader和若干个备份,某一个分区只能被同一个消费者组里的消费者消费, 也就是同一个消费者组只能有一个消费者消费一个分区

5. .index和.log文件

kafka为了防止log过大的问题采取分片和索引机制,将每个partition分为多个segment,每个segment对应.index和.log,.index文件存的是偏移量,.log 存放的kafka的消息数据。两个文件的命名都是最小的偏移量命名的,通过二分法找到偏移量所在的.index,然后找到.log文件对应的消息偏移量,然后通过seek去读.log文件的数据。

6. 副本数据同步策略

方案优点缺点
半数以上完成就发送ACK延迟低选举新leader,容忍n台节点故障,需要2n+1个副本
全部完成就发送ACK选举新leader,容忍n台节点故障,需要n+1个副本延迟高

kafka采用的是第二个策略,是因为第一种会有大量的数据冗余

7. ISR

leader节点会动态的ISR列表,意为和当前节点保持同步的follower。当ISR中的follower完成数据同步以后,就会发送ACK,如果长期未向leader同步数据就会被踢出ISR队列,当leader发生故障会从ISR选取新的leader。

8. ACK应答机制

值为 0producer不等待broker的ACK机制,延迟最低,broker接收到消息还未写入磁盘就会返回ACK,当broker故障的时候可能会数据丢失
值为 1producer等待broker的ACK机制,leader成功落盘后会返回ACK,如果在follower同步数据之前broker故障的时候可能会数据丢失
值为 -1producer等待broker的ACK机制,leader成功落盘并且在follower同步数据之后会返回ACK,如果在follower同步完成之后,broker发送ACK之前,leader发生故障,数据会重复

 9.  数据一致性的问题

LEO(log end offset)每个副本最大的offset
HW(high waterMark)指的是消费者能见到的最大的offset,消费者仅能见HW之前的数据,相当于ISR队列中的LEO

当leader发生故障时,在ISR队列中的follower,为了保证一致性,会将高于HW的数据全部切掉,并从新的leader同步数据。

当follower发生故障,就会将其短暂踢出ISR队列,并从磁盘读入最后一次HW之前所有的数据之后,并从leader同步数据,等follower的LEO追上offset的时候,再重新加入ISR队列。

这样只是能保证多个副本之间数据的一致性,并不能保证数据不会丢失和重复。

10. 精准一次性  exactly once

生产者方面:每个分区只有一个生产者写入消息,当出现异常或超时,生产者查询此分区最后一个消息,用于决定后续操作时重传还是继续发送。

消费者方面:通过offset,找到上次消费的位置,在重启或者Reblance之后继续消费,不出现重复数据的情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值