kafka下载,下载地址
kafka依赖zookeeper,安装kafka集群前需要先安装好zookeeper集群。
安装示例
三台机器:node01、node02、node03
zookeeper集群以安装完毕,可以通过zkServer.sh status查看zk机器是否启动成功
zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/mashibing/zookeeper-3.6.1/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
kafka配置文件修改
在kafka_2.12-2.1.0/config目录下,修改server.properties配置文件:
node01:
broker.id=0
listeners=PLAINTEXT://node01:9092
log.dirs=/var/kafka-logs
zookeeper.connect=node01:2181,node02:2181,node03:2181/kafka
node02:
broker.id=1
listeners=PLAINTEXT://node02:9092
log.dirs=/var/kafka-logs
zookeeper.connect=node01:2181,node02:2181,node03:2181/kafka
node03:
broker.id=2
listeners=PLAINTEXT://node03:9092
log.dirs=/var/kafka-logs
zookeeper.connect=node01:2181,node02:2181,node03:2181/kafka
在/etc/profile文件中把kafka的bin目录加入到path,方便命令使用。
export KAFKA_HOME=/opt/ningcg/kafka_2.12-2.1.0
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$KAFKA_HOME/bin
通过kafka-server-start.sh server.properties命令启动三台机器上的kafka
启动完成后,通过ls /kafka 命令可以看到kafka在zk上存储的信息
ls /kafka
[admin, brokers, cluster, config, consumers, controller, controller_epoch, isr_change_notification, latest_producer_id_block, log_dir_event_notification]
ls /kafka/brokers/ids
[0, 1, 2]
kafka相关命令:
创建topic:
kafka-topics.sh --zookeeper node01:2181,node02:2181,node03:2181/kafka --create --topic test007 --partitions 2 --replication-factor 2
查询topic:
kafka-topics.sh --zookeeper node01:2181,node02:2181,node03:2181/kafka --list
查看topic描述信息:
kafka-topics.sh --zookeeper node01:2181,node02:2181,node03:2181/kafka --describe --topic test007
Topic:test007 PartitionCount:2 ReplicationFactor:2 Configs:
Topic: test007 Partition: 0 Leader: 2 Replicas: 2,0 Isr: 2,0
Topic: test007 Partition: 1 Leader: 0 Replicas: 0,1 Isr: 0,1
消费消息:
kafka-console-consumer.sh --bootstrap-server node01:9092,node02:9092,node02:9092 --topic test007 --group ningcg
生产消息:
kafka-console-producer.sh --broker-list node03:9092 --topic test007
查看所有的消费组:
kafka-consumer-groups.sh --bootstrap-server node01:9092 --list
消费组信息:
kafka-consumer-groups.sh --bootstrap-server node01:9092 --describe --group test
消费消息可以指定不同的消费组,不同的消费组之间消费消息互不影响。
同一消费组之间,同一条消息只会被消费组内的一个成员消费。
消费组信息:
消息最终是落到topic对应的分区上的,如果消息没有顺序上的约束的话,可以水平扩展(动态增加partition)。如果消息有不同的分类,且需要同类的消息有序,可以设定消息的key(K、V类消息),kafka会把相同key类型的消息打到同一分区中。