基于Linux的Kafka安装,初步认识Kafka(一)

本文介绍了如何在Linux上安装Kafka并进行单机配置,包括启动Kafka服务器、创建主题、进行单机连通性测试,以及探讨Kafka的基本概念如Producer、Consumer、Consumer Group和Partition。此外,还讨论了解决生产者消息重复问题的幂等性机制。
摘要由CSDN通过智能技术生成

1. 认识kafka

1. 搭建单机kafka

  1. 将kafka的安装包上传到虚拟机,并解压

    cd  /usr/loacl/
    tar -zxvf kafka_2.13-2.6.0.tgz
    cd /usr/local/kafka_2.13-2.6.0
    
  2. 修改 server.properties

    cd /usr/local/kafka_2.13-2.6.0/config
    vim server.properties
    
    # 修改brock的id
    brock.id=0
    # 修改kafka数据存放的位置,kafka数据默认以log的方式存储
    log.dirs=/usr/local/kafka_2.13-2.6.0/data
    
    
  3. 启动kafka服务器

    cd /usr/local/kafka_2.13-2.6.0
    ./bin/kafka-server-start.sh config/server.properties 
    
  4. 查看端口号占用的进程

    netstat -tunlp|egrep "(2181|9092)"
    

    image-20201029193230635

    2181: 是zookeeper的默认端口号

    9092: 是kafka 的默认端口号

  5. 单机连通性测试,启动两个xshell客户端,一个用于生产者发送信息,一个用于消费者消费信息。

  6. 创建一个topics名为test的主题

    # zookeeper 服务器地址
    --zookeeper localhost:2181
    #  创建副本数为2 
     --replication-factor 1
    # 分区数为1
     --partitions 1
     # 主题为test
     --topic test
    
    ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
    
  7. 启动一个kafka的produce生产者

    cd /usr/local/kafka_2.13-2.6.0/
    ./bin/kafka-console-producer.sh  --broker-list localhost:9092 --topic test
    
  8. 启动一个kafka的consumer消费者

    cd /usr/local/kafka_2.13-2.6.0/
    ./bin/kafka-console-consumer.sh  --bootstrap-server localhost:9092 --topic test --from-beginning
    
  9. 此时我们从producer中输入任何单词,发送之后消费者consumer都能够接收到。

2. 单机基准测试

  • 生产者基准测试
bin/kafka-producer-perf-test.sh --topic test --num-records 500000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=192.168.216.130:9092 acks=1
--topic  主题名
--num-records  总共指定生产数据量(默认为500W)
--throughput    指定吞吐量——限流(-1代表不限流)
--record-size 	record数据的大小(字节为单位)
--producer-props   集群地址,ack=1,指定ack模式

image-20201029211839746

# 测试结果
500000 records sent, 15953.543282 records/sec (15.21 MB/sec), 1899.70 ms avg latency, 4087.00 ms max latency, 1689 ms 50th, 3327 ms 95th, 3921 ms 99th, 4070 ms 99.9th.
# 意思是50W条数据已经发送完毕;每秒大概发送1.6W条数据,约为15.21MB每秒;平均延迟为1899.70毫秒;最大延迟为4087毫秒;
  • 消费者基准测试
    bin/kafka-consumer-perf-test.sh --topic test --fetch-size 1048576 --messages 500000  --broker-list 192.168.216.130:9092
start.time2020-10-29 21:29:56:824
end.time2020-10-29 21:30:01:503
data.consumed.in.MB
共计消费的数据
476.8372
MB.sec
每秒消费的数量
101.9101
data.consumed.in.nMsg500002
nMsg.sec
每秒消费的数据
106860.8677
rebalance.time.ms1603978197378
fetch.time.ms-1603978192699
fetch.MB.sec-0.0000
fetch.nMsg.sec-0.0003

3. 搭建 kafka伪集群(待补充)

搭建kafka伪集群之前,先要有zookeeper伪集群。就好像单机Kafka也需要有单机zookeeper。

  1. 搭建zookeeper伪集群

  2. kafka伪集群复制配置文件

    cd/usr/local/kafka_2.13-2.6.0
    cp config/server.properties config/server-1.properties
    cp config/server.properties config/server-2.properties
    cp config/server.properties config/server-3.properties
    
  3. 修改 每个server 的配置文件 server-x.properties

    vim config/server-1.properties:
    
        host.name=192.168.216.130
        broker.id=1
        port=9093
        log.dir=/usr/local/kafka_2.13-2.6.0/kafka_data/server1
        zookeeper.connect=master:2182,master:2183,master:2184
        
    vim config/server-2.properties:   
        host.name=192.168.216.130
        broker.id=2
        port=9094
        log.dir=/usr/local/kafka_2.13-2.6.0/kafka_data/server2
        zookeeper.connect=master:2182,master:2183,master:2184
        
    vim config/server-3.properties:   
        host.name=192.168.216.130
        broker.id=3
        port=9095
        log.dir=/usr/local/kafka_2.13-2.6.0/kafka_data/server3
        zookeeper.connect=master:2182,master:2183,master:2184
    

4. kafka 基本概念

Producer : 消息和数据的生产者,向Kafka的一个Topic发布消息的进程、代码或服务;

Consumer : 消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息的进程、代码或服务;

Consumer Group : 逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息;

Broker : 物理概念,Kafka集群中的每个Kafka节点;

Topic : 逻辑概念,Kafka消息的类别,对数据进行区分、隔离;

Partition : 物理概念,Kafka下数据存储的基本单位,一个Topic数据会被分散存储在多个Partition中,每个Partition中的消息是有序的;

Replication : 同一个Partition可能会有多个Replia,多个Replica之间数据一般是一样的;

Replication Leader : 一个Partition的多个Replica上,需要一个Leader负责该Partition上与Producer和Consumer交互;

Replication Manager : 负责管理当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换、添加/读取消息等。

5. 幂等性

  • 生产这消息重复问题:

    即Kafka生产者生产消息到partition分区中,如果直接发送消息,Kafka会将消息保存到分区中,并且Kafka会返回一个 ACK 给生产者,表示当前操作是否成功,即Kafka分区是否保存了这条消息。如果ACK响应的过程失败了,此时生产者会认为Kafka分组没有接收到生产者生产的消息,生产者就会重试,继续发送没有发送成功的消息。那么此时Kafka就会保存了两条一模一样的消息。

  • 解决办法:

    • 当Kafka的生产者生产消息时,会增加一个Pid(生产者的唯一编号)和sequence number (针对消息的一个递增序列)。
    • 发送消息时,会连着 pid 和sequence number 一块发送。
    • Kafka 接收消息,会将消息和pid、sequence number 一并保存。
    • 如果ACK响应失败,生产者重试,再次发送消息时,Kafka会根据第二次接收到的pid、sequence number 判断这条消息是否需要被保存下来。
    • 判断条件:生产者发送过来的 sequence number 是否小于等于 partition 中消息对应的sequence number。 若小于,则说明已经保存过了。 ·
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值