Kafka安装测试顺序

下载

Apache kafka各版本下载地址:https://mirror.bit.edu.cn/apache/kafka/

CDH 官方提供的kafka http://archive.cloudera.com/kafka/kafka/4/

kafka_2.11-2.2.1-kafka-4.1.0.jar 中版本号意思,第一个是scala1.12 、kafka 2.2.1、cdh4.1.0

安装部署

  1. 添加hadoop 用户 useradd hadoop

  2. 切换到hadoop 用户目录下 su - hadoop

  3. 创建文件夹 mkdir app software tmp log data script sourcecode lib

  4. cd software 上传压缩包,解压并配置软连接 ln -s kafka_2.11-2.2.1-kafka-4.1.0 kafka

  5. 修改kafka配置文件,进入config 文件夹下 vi server.properties

    # 设置brokerid
    broker.id=0
    # 配置主机名
    host.name=bigdata01
    # 配置端口号
    port=9092
    # 设置log文件目录
    log.dirs=/home/hadoop/tmp/kafka-logs
    # 设置ZK目录
    zookeeper.connect=bigdata01:2181,bigdata02:2181,bigdata03:2181/kafka
    

启动kafka

进入到bin目录

./kafka-server-start.sh -daemon ../config/server.properties

基础概念

producer 生产者 flume
consumer 消费者 ss
broker 消息处理节点
topic 主题 一个相同属性的数据 放到一起
partition 是topic物理的分组,一个topic至少1个partition, 其实每个partition是一个【有序】的队列 ,其实就是一个Linux文件夹/目录而已,opic名称-序号
replication 副本数 就是一个分区文件夹 复制几份,和HDFSblock的副本设计思想是一致的。 为了高容错

常用命令

a.创建topic

./kafka-topics.sh \
--create \
--zookeeper bigdata01:2181,bigdata01:2182,bigdata01:2183  \
--partitions 3 \
--replication-factor 3 \
--topic g8

b.查看哪些topic

./kafka-topics.sh \
--list \
--zookeeper bigdata01:2181,bigdata02:2181,bigdata03:2181/kafka 

c.查看指定topic的状况

./kafka-topics.sh \
--describe \
--zookeeper bigdata01:2181,bigdata02:2181,bigdata03:2181/kafka \
--topic g8

Topic: g8      PartitionCount:3   ReplicationFactor:3    Configs:
Topic: g8      Partition: 0       Leader: 0              Replicas: 0,1,2 Isr: 0,1,2
Topic: g8      Partition: 1       Leader: 1              Replicas: 1,2,0 Isr: 1,2,0
Topic: g8      Partition: 2       Leader: 2              Replicas: 2,0,1 Isr: 2,0,1

Leader:【读写】

g8-0分区 提供读写的节点是 第一台broker(brokerid=0)
g8-1分区 提供读写的节点是 第二台broker(brokerid=1)
g8-2分区 提供读写的节点是 第三台broker(brokerid=2)

Replicas:复制该分区数据的节点列表 
g8-0分区 有 第一台 第二台 第三台 复制 
Isr: in-sync replicas  当前活跃的副本列表  是有可能成为leader

ack 机制

ack = 0      producer生产数据之后不会等待server端收到消息的回复
ack = 1      producer生产数据之后会等待leader发送确认保存好的回复
ack = all    prodcuer生茶数据之后会等待所有的节点保存好数据的回复

判断你的kafka集群是否正常

启动一个console的一个producer

# 生产者是broker-list

./kafka-console-producer.sh \
--broker-list bigdata01:9092,bigdata02:9092,bigdata03:9092 \
--topic g8

启动一个console的consumer

# 下面的消费者是bootstrap-list

./kafka-console-consumer.sh \
> --bootstrap-server bigdata01:9092,bigdata02:9092,bigdata03:9092 \
> --topic g8 \
> --from-beginning

使用producer生产数据查看消费者能够正常消费

顺序问题

关于kafka消费的有序问题
比如采集mysql的binlog日志,先insert 一条数据,在对这条数据进行update为2,update为3,update为5,再delete,这样如果消费binlog数据的时候保证不了全局有序就会出现错误,有可能导致insert 数据之后直接delete掉,那么怎么解决这个问题呢?
1.我们知道kafka的每个parition中是有序的,所以这里可以设置一个partition来控制全局有序,但是这样做的后果是kafka没有了吞吐,kafka 之后一个分区,这个分区的数据只能被一个消费者组的一个消费者消费,这样必然导致吞吐很低
2.将数据按照表名和主键进行分区,同一个表的数据发送到一个parition中再根据时间字段进行排序,如果没有时间字段可以使用kafka的时间戳字段
3.分组排序
在这组里根据时间戳排序(业务字段有最好;但是没有这个字段咋办–》只能使用kafka数据的时间戳)

猜你喜欢

转载自blog.csdn.net/qq_43081842/article/details/105634771