kafka基本命令

1、编写命令脚本,直接将集群的kafka全部启动,同理编写zookeerper的集群启动脚本
/usr/local/java/zookeeper/bin/zkServer.sh start

case  $1 in
"start"){

   for i in hadoop01 hadoop02 hadoop03
   do
       echo "************$i************"
       ssh $i "/usr/local/java/kafka/bin/kafka-server-start.sh -daemon /usr/local/java/kafka/config/server.properties"
   done
};;

"stop"){

   for i in hadoop01 hadoop02 hadoop03
   do
       echo "************$i************"
       ssh $i "/usr/local/java/kafka/bin/kafka-server-stop.sh"
   done
};;
esac

2、topic的增删改查

# 查看hadoop01:2181上所有的kafka分区,因为kafka中broker的数据信息都是存储再zookeeper下的
kafka-topics.sh --list --zookeeper hadoop01:2181

# Created topic first.注意副本数都一定要小于broekr数,分区主要是为了提高kafka负载均衡能力,而副本则是保证分区的高可用和数据安全,副本也分为leader和follow,leader负责全部的读写业务,follow则只是备份作用,follow是真正的副本,如果这两者大于broker数那就弊大于利,造成浪费,分区数最好等于broker数目
kafka-topics.sh --create --zookeeper hadoop01:2181 --topic first --partitions 3 --replication-factor 3 

#删除副本(配置文件中进行相关配置才能真正删除,否则只能逻辑删除)
kafka-topics.sh --delete --zookeeper hadoop01:2181 --topic first

kafka-topics.sh --describe --topic first --zookeeper hadoop01:2181

#分区名first,分区id:xxx,分区数:3,每个分区对应了两台真正的副本分散到不同的服务器上
Topic: first	TopicId: RVptyRB5QsCjB-8hrFGgog	PartitionCount: 3	ReplicationFactor: 3
Configs:
#分别对应 分区名first、分区编号0,1,2  leadr:每个分区都有一个主分区,分区=一个主分区+n个副本,主分区通常都是分散在不同服务器上的,以下分别代表分布在broker2,broker0,broker1上, Replicas第一行都是代表主分区所在的服务器标号,余下的是副本所在服务的编号,Isr与Replicas相同代表当前集群健康度良好,都能访问,isr代表的是能访问的分区(通过时间差和内容差两个指标),同时如果leader挂掉会从isr中选择一个
	Topic: first	Partition: 0	Leader: 2	Replicas: 2,0,1	Isr: 2,0,1
	Topic: first	Partition: 1	Leader: 0	Replicas: 0,1,2	Isr: 0,1,2
	Topic: first	Partition: 2	Leader: 1	Replicas: 1,2,0	Isr: 1,2,0

#在hadoop01节点开启生产者
kafka-console-producer.sh --topic first --broker-list hadoop01:9092

#在hadoop02/3节点开启消费者,旧版消费者往往也是讲消费信息存储再zk中,新版本
bin/kafka-console-consumer.sh --zookeeper hadoop01:2181 --topic first
#新版消费者连接消息队列的方法
bin/kafka-console-consumer.sh --bootstrap-server hadoop01:9092 --topic first
bin/kafka-console-consumer.sh --bootstrap-server hadoop01:9092 --from-beginning --topic first	

1 联通后producor可以发送数据,涉及的主题不存在也没关系,可以自动创建
2 由于生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位
效率低下,Kafka 采取了分片和索引机制,将每个 partition 分为多个 segment。每个 segment,对应两个文件——“.index”文件和“.log”文件。这些文件位于一个文件夹下,该文件夹的命名,规则为:topic 名称+分区序号
3 kafka broker集群的logs中xxx.log存储数据,xxx.index存储偏移量
4 ISR通过LEO和HW机制保证主从分区副本的数据一致性,但不能解决数据重复性和丢失的问题
4 ack机制和同步异步无关,kafka默认采用异步发送,而是用于平衡数据安全性和响应速度的关系,ack!=0时会造成数据重复发送问题

kafka架构关系

broker集群的数据信息注册在zookeeper集群中,zookeeper的选举机制选出一台broker controller,其它的均为broker slave,同时broker的数据信息也会存储再zookeeper及群中

producer存储于本地topic
consumer可以存储在本地topic也可以存储在zk中,推荐存储在本地topic

offset之前存储在zk中,后来存在于kafka本地特点的topic中,增强稳定性,

1 kafka存储位置为何由zk变为了本地topic中存储;
2 保证数据安全性ack
3 一个consumer group对应一个分布式的一个业务,比如商品详情业务,订单业务,客户信息业务…,每个业务下的服务器我们将其看成一个消费者
4 __consumer_offsets:0.9之前

同一partition的leader和follow不能同时出现在一台机器上
同一topic下的各个partition得leader是不能放到同一broker上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值