版权声明:
本文为博主学习整理原创文章,如有不正之处请多多指教。
未经博主允许不得转载。https://blog.csdn.net/qq_42595261/article/details/83377837
启动zookeeper服务(笔者存放路径为/root/abc)
nohup zookeeper-server-start.sh /root/abc/kafka_2.11-0.10.0.1/config/zookeeper.properties &
启动kafka服务
nohup kafka-server-start.sh /root/abc/kafka_2.11-0.10.0.1/config/server.properties &
创建主题(副本数在后面进行修改)
kafka-topics.sh --create --zookeeper localhost:2181 --topic mytopic --partitions 1 --replication-factor 1
查看所有的主题信息
kafka-topics.sh --describe --zookeeper localhost:2181
查看指定主题信息
kafka-topics.sh --describe --zookeeper localhost:2181,localhost2:2181,localhost3:2181 --topic mytopic1
生成数据
kafka-console-producer.sh --broker-list localhost:9092 --topic mytopic
消费数据
kafka-console-consumer.sh --zookeeper localhost:2181 --topic mytopic
停止kafka
bin/kafka-server-stop.sh
停止zookeeper
bin/zookeeper-server-stop.sh
描述topic
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
删除topic(慎用,只会删除zookeeper中的元数据,消息文件须手动删除)
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic topicname
删除topic中存储的内容在config/server.properties中找到如下的位置
# A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs
查看topic某分区偏移量最大(小)值
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic hive-mdatabase-hostsltable --time -1 --broker-list node86:9092 --partitions 0
注: time为-1时表示最大值,time为-2时表示最小值
增加topic分区数
为topic t_cdr 增加10个分区
bin/kafka-topics.sh --zookeeper node01:2181 --alter --topic t_cdr --partitions 10
查看topic消费进度
这个会显示出consumer group的offset情况, 必须参数为--group, 不指定--topic,默认为所有topic
Displays the: Consumer Group, Topic, Partitions, Offset, logSize, Lag, Owner for the specified set of Topics and Consumer Group
bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker
Example,
bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group pv
Group Topic Pid Offset logSize Lag Owner
pv page_visits 0 21 21 0 none
pv page_visits 1 19 19 0 none
pv page_visits 2 20 20 0 none
史上最全KafKa原理介绍:
https://zm12.sm-tc.cn/?src=l4uLj8XQ0J2TkJjRnIybkdGRmovQhpyXmpGZmpGY0J6Ni5ack5rQm5qLnpaTjNDIy8bHz8rMzg%3D%3D&uid=970cdce60bf10ba2ea899844a387fe26&hid=037c91855a26a36aaad4e3c11a587078&pos=6&cid=9&time=1521077573732&from=click&restype=1&pagetype=0000004002000408&bu=structure_web_info&query=kafka%E5%8E%9F%E7%90%860+-1+1&mode=&v=1&force=true&wap=false&uc_param_str=dnnt0nwvepffrgibijbprsvdsdichei
1、解压zookeeper
tar -zxvf zookeeper-3.4.9.tar.gz
2、重命名 zoo_sample.cfg 为 zoo.cfg
vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs
clientPort=2181
配置解析:
tickTime: zookeeper中使用的基本时间单位, 毫秒值.
dataDir: 数据目录. 可以是任意目录.
dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.
clientPort: 监听client连接的端口号.
启动:
zookeeper_home/bin/zkServer.sh start
查看服务: jps
5321 QuorumPeerMain
5338 Jps
查看运行状态:
zookeeper_home/bin/zkServer.sh status
需要在三台服务器上安装zookeeper,向在某一台上安装好之后通过scp的方式发送到其它主机
进入到conf目录:/usr/local/apps/zookeeper-3.4.9/conf
修改配置文件名称:mv zoo_sample.cfg zoo.cfg
修改zk的数据目录:dataDir=/opt/zookeeper/data
需要配置有哪些的服务节点:
zoo.cfg中配置:
放在zoo.cfg的文件末尾
tickTime=2000
dataDir=/opt/zookeeper/data / / 此路径为新建路径,需提前新建
clientPort=2181
initLimit=10
syncLimit=5
server.1=master:2888:3888
server.2=node1:2888:3888
server.3=node2:2888:3888
server.1=broker1:2888:3888
server.2=broker2:2888:3888
server.3=broker3:2888:3888
broker:表示主机名
在数据目录中,需要创建一个id标志:操作如下:
在数据目录下,创建一个myid文件。内容为server.后的这个编号
如下面的操作。在keduox02主机上需要在数据目录中创建一个myid文件,内容为2
需要先创建数据目录
mkdir /opt/zookeeper/data
关闭防火墙
启动:
zkServer.sh start
可以通过zkServer.sh status查看状态
新建maven项目之前需要先安装该关系依赖
Properties props = new Properties();
//指定连接的服务器集群
props.put("bootstrap.servers", "localhost1:9092,localhost2:9092,localhost3:9092");
//key和value进行序列化
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("acks", "all");
props.put("buffer.memory", 33554432);
//实例化生产者对象
//Producer producer = new KafkaProducer(props);
KafkaProducer producer = new KafkaProducer(props);
for (int i = 0; i < 100; i++) {
//向生产者中写入数据
String key = "key"+i;
String data = "hello data"+key;
producer.send(new ProducerRecord("mytopic1",key,data));
System.out.println("key "+key+"value "+data);
}
producer.close();
//连接服务器的地址
Properties props = new Properties();
props.put("bootstrap.servers", "localhost1:9092,localhost2:9092,localhost3:9092");
props.put("group.id", "group001");
//如果value合法,则自动提交偏移量
props.put("enable.auto.commit", "true");
//设置多久一次更新被消费消息的偏移量
props.put("auto.commit.interval.ms", "1000");
//设置会话响应的时间,超过这个时间kafka可以选择放弃消费或者消费下一条消息
props.put("session.timeout.ms", "30000");
//自动重置offset
props.put("auto.offset.reset","earliest");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("mytopic1"));
while (true) {
//读取数据的超时时间
ConsumerRecords records = consumer.poll(100);
//遍历拿到的数据
for (ConsumerRecord record : records)
System.out.println(record.value());
}
代码没错,直接运行,能运行成功,但是生产者无法将数据写入topic中,消费者也无法从topic中拿到数据。需要在kafka的server.properties中新增配置项。解决办法网址链接:
https://blog.csdn.net/zhaominpro/article/details/79068141
我 是 有 底 线 的