kafka(2)

快速入门

第一步:下载压缩包
下载2.1.0版本并解压缩。

> tar -xzf kafka_2.11-2.1.0.tgz
> cd kafka_2.11-2.1.0

第二步:启动服务器

1.使用与kafka打包的脚本来获得一个单节点ZooKeeper实例

> bin/zookeeper-server-start.sh config/zookeeper.properties

2.启动kafka服务器

> bin/kafka-server-start.sh config/server.properties

第三步:创建topic
创建一个只有一个分区(partition)和一个副本因子(replication-factor)的主题(topic),取名为”test“

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

查看topic列表

> bin/kafka-topics.sh --list --zookeeper localhost:2181

向不存在的主题发布时自动创建主题=>在server.properties配置文件中追加以下两个属性

auto.create.topics.enable=true
default.replication.factor=3

第四步:开始一个生产者producer,发送消息
Kafka附带一个命令行客户机(sh脚本–kafka-console-producer.sh),它将从文件或标准输入中获取输入,并将其作为消息发送到Kafka集群。默认情况下,每一行都将作为单独的消息发送。

  > bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
    This is a message
    This is another message

第五步:开始一个消费者consumer

该脚本能够将消息发到标准输出

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message

如果上面的每个命令都在不同的终端中运行,那么现在应该能够在生产者终端中输入消息,并看到它们出现在消费者终端中。
第六步:在一台机器上搭建多节点集群
在一台机器上搭建3个broker,使其组成一个Kafka集群,(本人感觉这样做并无卵用,集群的作用没有发挥,后面会在不同机器上搭建)
进入config目录下,将server.properties 拷贝2份,并重命名

> cp config/server.properties config/server-1.properties
> cp config/server.properties config/server-2.properties

修改配置文件

config/server-1.properties:
    broker.id=1
    listeners=PLAINTEXT://:9093
    log.dirs=/tmp/kafka-logs-1
 
config/server-2.properties:
    broker.id=2
    listeners=PLAINTEXT://:9094
    log.dirs=/tmp/kafka-logs-2

broker.id是集群中每个节点的名称,它是唯一且永久的

之前本人是这样配置的,但是使用java api运行生产者和消费者均不能发布和订阅消息,百度了一下listeners要写上ip,可参考以下:"PLAINTEXT"表示协议,可选的值有PLAINTEXT和SSL,hostname可以指定IP地址,也可以用"0.0.0.0"表示对所有的网络接口有效,如果hostname为空表示只对默认的网络接口有效,也就是说如果你没有配置advertised.listeners,就使用listeners的配置通告给消息的生产者和消费者,这个过程是在生产者和消费者获取源数据(metadata)。如果都没配置,那么就使用java.net.InetAddress.getCanonicalHostName()返回的值,对于ipv4,基本就是localhost了。然后生产者就会一直卡死,没有反应,原因是你的客户端连接的是127.0.0.1:9092,而不是你期望的服务器的地址。因此只需要把listeners的地址修改成你的服务器地址即可。

使用新建的两个配置文件分别启动服务器

> bin/kafka-server-start.sh config/server-1.properties &
> bin/kafka-server-start.sh config/server-2.properties &

创建一个只有1个分区(partition)和3个副本(replication)的主题(topic),取名为”my-replicated-topic“

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

查看topic信息

> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
    Topic: my-replicated-topic  Partition: 0    Leader: 1   Replicas: 1,2,0 Isr: 1,2,0

第一行给出topic所有分区的摘要
“leader”:该节点负责该分区的所有的读和写,每个节点的leader都是随机选择的。
“replicas”:备份的节点列表,无论该节点是否是leader或者目前是否还活着,只是显示。
“isr”:“同步备份”的节点列表,也就是活着的节点并且正在同步leader。

我们可以在创建的原始主题上运行相同的命令来查看它的位置:

> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Topic:test  PartitionCount:1    ReplicationFactor:1 Configs:
    Topic: test Partition: 0    Leader: 0   Replicas: 0 Isr: 0

发布消息到my-replicated-topic主题

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
my test message 1
my test message 2

消费

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
my test message 1
my test message 2

容错能力测试(实测貌似不行)

> ps aux | grep server-1.properties
7564 ttys002    0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.8/Home/bin/java...
> kill -9 7564

查看

> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
    Topic: my-replicated-topic  Partition: 0    Leader: 2   Replicas: 1,2,0 Isr: 2,0

之前发布的信息仍然可以被消费

> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
my test message 1
my test message 2
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值