topic
启动目录:
topic核心
查看所有主题:bin/kafka-topics.sh -bootstrap-server 192.168.96.129:9092,192.168.96.130:9092,192.168.96.131:9092 --list
创建topic:bin/kafka-topics.sh -bootstrap-server 192.168.96.129:9092,192.168.96.130:9092,192.168.96.131:9092 --topic first --create --partitions 1 --replication-factor 3
查看topic:bin/kafka-topics.sh -bootstrap-server 192.168.96.129:9092,192.168.96.130:9092,192.168.96.131:9092 --topic first --describe
Leader:3 (3节点为leader)
修改分区数(分区数只能增加):bin/kafka-topics.sh -bootstrap-server 192.168.96.129:9092,192.168.96.130:9092,192.168.96.131:9092 --topic first --alter --partitions 3
product
生产数据:bin/kafka-console-producer.sh -bootstrap-server 192.168.96.129:9092,192.168.96.130:9092,192.168.96.131:9092 --topic first
consumer
消费数据:bin/kafka-console-consumer.sh -bootstrap-server 192.168.96.129:9092,192.168.96.130:9092,192.168.96.131:9092 --topic first
消费历史数据 bin/kafka-console-consumer.sh -bootstrap-server 192.168.96.129:9092,192.168.96.130:9092,192.168.96.131:9092 --topic first --from-beginning
FAQ:
1 分区数为啥只能增加???(减少后报错)
2 不能通过命令的方式修改副本数(其他方式可以-->json文件并执行副本修改计划)
生产者原理:
retries:重试次数默认值:int最大值
NetClient:与broker数一致
生产者异步发送:
1 普通异步:本地代码访问虚拟机 close超时,且consumer未收到信息
解决办法:
2 回调异步
3 同步发送
get()
FAQ:
1 多个分区。客户端为啥只往一个partation发送消息?
生产者_分区
分区的好处:
分区策略:
1 默认分区器:DefaultPartitioner
demo
2 自定义分区策略
生产者_提高生产者吞吐量
什么时候需要把RecordAccumulator设置64M. 当分区数比较大的时候。多个batch.size运行,导致缓冲区满。
数据可靠性:
ack 0 1 -1 分析
ISR:Leader维护了一个动态的in-sync replica set (ISR),意为和Leader保持同步的Follower+Leader集合(leader:0, isr:0,1,2)如果Follow长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。该事件阈值由replica.lag.time.max.ms参数设定,默认30s
demo
可靠性总结:(-1 有重复数据风险)
官方文档:
数据重复性:
幂等性原理:(kafka幂等性只能保证在单分区、单会话【pid】内数据不重复)
精确依次(Exactly once) = 幂等性+至少一次(ack=-1 + 分区副本数>=2 + ISR最小副本数>=2)
生产者事务:(开启事务,必须开启幂等性)
生产经验-数据有序:
a 单分区内有序 (有条件)
b 多分区 无序(有序要在consumer端统一排序-spark等处理)
生产经验-数据乱序:NetworkClient 缓存队列可能乱序