简介
高吞吐量的分布式发布订阅消息系统,流平台,消息中间件的一种(消息即TCP , HTTP等,中间件即用来存储生产者产生的数据,为消费者提供资源的中间仓库,相当于缓冲)
概念
broker
kafka集群包含一个或多个服务器,这种服务器被称为broker
topic
每条发布到kafka集群的消息都有一个类别,这个类别被称为topic,(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
Partition
是物理上的概念,与消费者组中的消费者数量对应。每个Topic包含一个或多个
Partition.每个分区仅由同一个消费者组中的一个消费者消费。
Producer
负责发布消息到Kafka broker
Consumer
消息消费者,向Kafka broker读取消息的客户端。
Consumer Group
每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。消费者组中的消费者数量不能比分区数量多
传统的消息有两种模型,队列和发布订阅
http://orchome.com/kafka/index
安装启动
-
安装很简单,下载并解压即可
-
配置文件: config/server.properties
# 如果需要远程访问
listeners=PLAINTEXT://192.168.1.104:9092
# 可创建多个kafka实例
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs-2
# 注: broker.id对于集群中每个节点是独一无二且永久存在的名字。只有在同一台机器上运行多个实例才需要保障端口和文件名不一致
- 启动zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties - 启动kafka
bin/kafka-server-start.sh config/server.properties
启动其余的节点:bin/kafka-server-start.sh config/server-1.properties &
更加生产的做法
bin/kafka-server-start.sh -daemon ./config/server.properties >/dev/null 2>log/kafka.err &
命令行
所有命令行工具都有额外选项,不带参数执行时可以得到详细信息
- 创建主题
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test --if-not-exists - 删除主题
bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test_topic
设置主题的保留时间,以达到清空主题的目的
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic test_topic --config
retention.ms=1000
- 获取主题列表
bin/kafka-topics.sh --list --zookeeper localhost:2181

- 获取主题的详情
bin/kafka-topics.sh --describe --zookeeper localhost:2181 获取所有主题
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
leader负责指定分区的读写,通过随机选举产生,数字代表节点
replica是复制了该分区数据的节点列表(无论是否是leader或者是否存活)
isr是已同步的副本集,他是副本集replica的子集,表示当前存活并且跟随leader的节点列表
当kill一个leader时,会重新选举新的leader,并且该节点不会出现在isr中,数据仍然可以获取

5. 创建消息
Echo message | bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test --producer.config config/producer.properties
- 消费消息,查看消息详细内容
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --new-consumer --from-beginning --consumer.config config/consumer.properties - 消费者列表查询
bin/kafka-consumer-groups.sh --bootstrap-server 10.0.25.12:9092 —list

- 显示某个消费组的消费详情
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group test-consumer-group - 清空topic
./bin/kafka-consumer-groups.sh --bootstrap-server ${hosts} --group ${consumer_group} --topic ${topic} --reset-offsets --to-latest --execute
平衡leader
bin/kafka-preferred-replica-election.sh --zookeeper zk_host:port/chroot
kafka自带压测命令
API
http://kafka.apache.org/10/javadoc/index.html?org/apache/kafka/clients/给出了使用例子。
生产者API允许应用程序发送数据流到kafka集群的topic,需要使用如下maven依赖
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>1.0.0</version>
</dependency>
流API允许将数据流从输入topic传送到输出topic
故障
patition leader is -1.
设置unclean.leader.election.enable
https://stackoverflow.com/questions/49587345/do-you-know-why-the-partition-leader-is-1-and-how-to-solve-it
kafka.common.KafkaException: Should not set log end offset on partition
修改所有主机的host.name为互联的ip
kafka error(notleaderforpartition)
没有找到集群的Leader
本文深入探讨了Kafka这一高吞吐量分布式消息系统的工作原理,包括其核心组件如Broker、Topic、Partition、Producer和Consumer的功能及交互方式。同时,提供了详细的安装、配置和操作指南,涵盖主题管理、消息生产和消费的命令行示例。
569

被折叠的 条评论
为什么被折叠?



