kafka基础

本文深入探讨了Kafka这一高吞吐量分布式消息系统的工作原理,包括其核心组件如Broker、Topic、Partition、Producer和Consumer的功能及交互方式。同时,提供了详细的安装、配置和操作指南,涵盖主题管理、消息生产和消费的命令行示例。

简介

高吞吐量的分布式发布订阅消息系统,流平台,消息中间件的一种(消息即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

安装启动

  1. 安装很简单,下载并解压即可

  2. 配置文件: 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对于集群中每个节点是独一无二且永久存在的名字。只有在同一台机器上运行多个实例才需要保障端口和文件名不一致
  1. 启动zookeeper
    bin/zookeeper-server-start.sh config/zookeeper.properties
  2. 启动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 &

命令行

所有命令行工具都有额外选项,不带参数执行时可以得到详细信息

  1. 创建主题
    bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test --if-not-exists
  2. 删除主题
    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

  1. 获取主题列表
    bin/kafka-topics.sh --list --zookeeper localhost:2181
    在这里插入图片描述
  2. 获取主题的详情
    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

  1. 消费消息,查看消息详细内容
    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
  2. 消费者列表查询
    bin/kafka-consumer-groups.sh --bootstrap-server 10.0.25.12:9092 —list
    在这里插入图片描述
  3. 显示某个消费组的消费详情
    bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group test-consumer-group
  4. 清空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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值