我个人的kafka_2.12-1.1.0实践:安装与测试,单机版(★firecat推荐★)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 我个人的kafka_2.12-1.1.0实践:安装与测试,单机版(★firecat推荐★)

一、我的服务器环境:CentOS7,kafka依赖JVM环境,要求安装有JDK


使用CentOS7系统,先删除自带的JDK,自带的不好用(例如jps终端命令不能用等)。下载官网完整的JDK,并设置环境变量JAVA_HOME。详情见:


https://blog.csdn.net/libaineu2004/article/details/80060812


[root@localhost ~]# java -version

openjdk version "1.8.0_141"

OpenJDK Runtime Environment (build 1.8.0_141-b16)

OpenJDK 64-Bit Server VM (build 25.141-b16, mixed mode)


二、下载

Kafka(http://kafka.apache.org/)依赖ZooKeeper

http://mirrors.shuosc.org/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz  --- 稳定版

http://mirrors.shuosc.org/apache/kafka/1.1.0/kafka-1.1.0-src.tgz

http://mirror.bit.edu.cn/apache/kafka/1.1.0/kafka_2.12-1.1.0.tgz


由于kafka_2.12-1.1.0.tgz是可执行程序,里面集成了zookeeper简易版,如果只是单机测试那么仅仅下载这个就可以了。但是简易版功能有限。在生产环境下,建议还是直接下载官方zookeeper软件。




三、运行与测试,以下都是终端命令


1、cd kafka_2.12-1.1.0


2、启动Zookeeper,如果无报错则说明启动成功。daemon以及nohup &是实现在后台启动,即守护进程。


方法1(推荐) ./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties


方法2 nohup ./bin/zookeeper-server-start.sh config/zookeeper.properties&


3、启动Kafka,如果无报错则说明启动成功。daemon以及nohup &是实现在后台启动,即守护进程。

方法1 (推荐)./bin/kafka-server-start.sh -daemon config/server.properties


方法2 nohup ./bin/kafka-server-start.sh config/server.properties&



4、查看进程是否正常运行,通过检测2181与9092端口,2181是zookeeper,9092是kafka

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

tcp        0      0 :::2181                     :::*                        LISTEN      19787/java          

tcp        0      0 :::9092                     :::*                        LISTEN      28094/java




我们也可以使用jps终端命令查看是否启动:


[root@bogon kafka_2.12-1.1.0]# jps

4384 Kafka

3921 QuorumPeerMain

4412 Jps




5、创建主题,例如test

./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test


./bin/kafka-topics.sh --create --zookeeper 172.16.6.170:2181,172.16.6.170:2182,172.16.6.170:2183 --replication-factor 3 --partitions 3 --topic emqtest


--zookeeper : zookeeper集群列表,用英文逗号分隔。可以不用指定zookeeper整个集群内的节点列表,只指定某个或某几个zookeeper节点列表也是可以的

replication-factor : 复制数目,提供failover机制;1代表只在一个broker上有数据记录,一般值都大于1,代表一份数据会自动同步到其他的多个broker,防止某个broker宕机后数据丢失。

partitions : 一个topic可以被切分成多个partitions,一个消费者可以消费多个partitions,但一个partitions只能被一个消费者消费,所以增加partitions可以增加消费者的吞吐量。kafka只保证一个partitions内的消息是有序的,多个一个partitions之间的数据是无序的。



注意,


(1)使用集群时,必须手动先创建topic,指定zookeeper节点列表;单机也应该要创建。否则客户端会报错。


(2)主题名不建议使用"."和"_"字符。


[root@localhost kafka_2.12-1.0.0copy1]# ./bin/kafka-topics.sh --create --zookeeper 172.16.6.170:2181,172.16.6.170:2182,172.16.6.170:2183 --replication-factor 3 --

partitions 3 --topic emq_broker_message1

WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both.

Created topic "emq_broker_message1".

[root@localhost kafka_2.12-1.0.0copy1]# ./bin/kafka-topics.sh --create --zookeeper 172.16.6.170:2181,172.16.6.170:2182,172.16.6.170:2183 --replication-factor 3 --

partitions 3 --topic emqtest

Created topic "emqtest".

(3)建议创建主题时,指定分区数为kafka broker节点数目的整数倍,例如broker有3台,那么分区就设置为3个或6个或9个--partitions 3。创建完主题,可以在路径log.dirs看到主题和分区的文件夹。详情参见《Kafka入门与实践.牟大恩》3.6.1节描述


(4)--replication-factor 3,《kafka权威指南》6.3.1节建议复制系数为3.但是前提是数值不能大于broker的节点数。


如果broker节点数为1,复制系数设置为3,则会报错:


Error while executing topic command : Replication factor: 3 larger than available brokers: 1.


(5)单机时,zookeeper数目是1;集群时,zookeeper的数目建议为奇数个,至少3个。


(6)server.properties文件设置默认值


num.partitions=3

default.replication.factor=1




6、查看主题


./bin/kafka-topics.sh --describe --zookeeper  localhost:2181 --topic test


./bin/kafka-topics.sh --list --zookeeper localhost:2181


例如:broker集群,有3个节点。同时给主题mynewt分配了3个分区。每个分区都有leader和follow。


[root@bogon kafka_2.12-1.1.0]# ./bin/kafka-topics.sh --describe --zookeeper  localhost:2181 --topic mynewt

Topic:mynewt PartitionCount:3 ReplicationFactor:3 Configs:

Topic: mynewt Partition: 0 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0

Topic: mynewt Partition: 1 Leader: 0 Replicas: 0,2,1 Isr: 0,2,1

Topic: mynewt Partition: 2 Leader: 1 Replicas: 1,0,2 Isr: 1,0,2


7、开启一个终端,发送消息,生产者的消息要发往kafka

./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test


8、另起一个终端,消费消息,消费者的消息来自zookeeper(协调转发)

./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

将来新版本需要写成./bin/kafka-console-consumer.sh --bootstrap-server localhost:2181 --topic test --from-beginning


9、结束进程

./bin/kafka-server-stop.sh

./bin/zookeeper-server-stop.sh


kafka启动时先启动zookeeper,再启动kafka;关闭时相反,先关闭kafka,再关闭zookeeper。




四、总结


1、kafka有什么?

producer 消息的生成者,即发布消息

consumer 消息的消费者,即订阅消息

broker Kafka以集群的方式运行,可以由一个或多个服务组成,服务即broker

zookeeper 协调转发


2、配置文件与消息持久化路径


/config/server.properties


# A comma seperated list of directories under which to store log files

log.dirs=/tmp/kafka-logs

例如客户端发送test为主题的消息,会持久化在这个文件:/tmp/kafka-logs/test-0/00000000000000000000.log

主题列表会记录在/tmp/zookeeper




/config/zookeeper.properties


# the directory where the snapshot is stored.

dataDir=/tmp/zookeeper

# the port at which the clients will connect

clientPort=2181

建议修改kafka的日志目录和zookeeper数据目录,因为这两项默认放在tmp目录,而tmp目录中内容会随重启而丢失:

server.properties:

   log.dirs=/tmp/kafka-logs

   修改为

   log.dirs=/usr/local/kafka/logs


zookeeper.properties

   dataDir=/tmp/zookeeper

   修改为

   dataDir=/usr/local/zookeeper/data



3、配置文件bootstrap.servers 和 broker.list区别:

本以为是两个参数,其实是实现一个功能,查看源代码后发现broker.list是旧版本命令




4、自己写的shell启动和关闭kafka脚本,kafka.sh -- 这个脚本有问题,不稳定


#!/bin/bash
kafka_home=/root/Downloads/kafka_2.12-1.0.0/
case $1 in 
   start)  # 服务启动需要做的步骤
           echo "zookeeper start"
           $kafka_home/bin/zookeeper-server-start.sh -daemon $kafka_home/config/zookeeper.properties
           #sleep 1
           echo "kafka start"
           $kafka_home/bin/kafka-server-start.sh -daemon $kafka_home/config/server.properties
           #sleep 1
           ;;
   stop)   # 服务停止需要做的步骤
           echo "kafka stop"
           $kafka_home/bin/kafka-server-stop.sh
           #sleep 1
           echo "zookeeper stop"
           $kafka_home/bin/zookeeper-server-stop.sh
           #sleep 1
           ;;
   restart) # 重启服务需要做的步骤
            ...
           ;;
   status) # 查看状态需要做的步骤
             ...
           ;;
   *) echo "$0 {start|stop|restart|status}"
           exit 4
           ;;
esac

5、zookeeper集群


kafka是通过zookeeper来管理集群。 kafka软件包内虽然包括了一个简版的zookeeper,但是感觉功能有限。在生产环境下,建议还是直接下载官方zookeeper软件。 下载最新版的zookeeper软件:


http://zookeeper.apache.org/

http://mirror.bit.edu.cn/apache/zookeeper/

zookeeper-3.4.11.tar.gz




欢迎访问姊妹篇:我个人的kafka broker和zookeeper集群实践(★firecat推荐★)




---


参考文献


物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息


centos7 安装 kafka_2.11-1.0.0

zookeeper安装及部署

Kafka安装及部署

CentOS下ZooKeeper单机模式、集群模式安装

Kafka单机、集群模式安装详解(一)


kafka集群监控之KafkaOffsetMonitor 0.4.1版本 以及用sbt编译KafkaOffsetMonitor

https://github.com/quantifind/KafkaOffsetMonitor


相关文章
|
12天前
|
Java 测试技术 开发者
初学者入门:掌握单元测试的基础与实践
【10月更文挑战第14天】单元测试是一种软件测试方法,它验证软件中的最小可测试单元——通常是单独的函数或类——是否按预期工作。单元测试的目标是确保每个模块在其自身范围内正确无误地运行。这些测试应该独立于其他模块,并且应该能够反复执行而不受外部环境的影响。
36 2
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
探索软件测试的边界:从基础到高级的实践之旅
【10月更文挑战第21天】 在当今数字化时代,软件已成为我们生活和工作中不可或缺的一部分。随着技术的快速发展,对软件质量的要求也日益提高。本文旨在通过深入浅出的方式,带领读者踏上一场从基础到高级的软件测试实践之旅。我们将探讨软件测试的基本概念、重要性以及如何有效地进行测试规划和执行。通过具体案例分析,揭示常见错误及其解决方案,同时展望未来软件测试领域的发展趋势。无论你是软件开发新手还是经验丰富的测试工程师,这篇文章都将为你提供宝贵的见解和启发。
19 8
|
2天前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。
|
5天前
|
测试技术 C# 数据库
C# 一分钟浅谈:测试驱动开发 (TDD) 实践
【10月更文挑战第18天】测试驱动开发(TDD)是一种软件开发方法论,强调先编写测试代码再编写功能代码,以确保代码质量和可维护性。本文从 TDD 的基本概念入手,详细介绍了其核心步骤——编写测试、运行测试并失败、编写代码使测试通过,以及“红绿重构”循环。文章还探讨了 TDD 的优势,包括提高代码质量、促进设计思考、减少调试时间和文档化。此外,文中分析了常见问题及解决方案,如测试覆盖率不足、测试代码过于复杂、忽视重构和测试依赖过多,并通过一个简单的计算器类的代码案例,展示了 TDD 的实际应用过程。
13 1
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在软件测试中的创新应用与实践###
本文旨在探讨人工智能(AI)技术如何革新软件测试领域,提升测试效率、质量与覆盖范围。通过深入分析AI驱动的自动化测试工具、智能化缺陷预测模型及持续集成/持续部署(CI/CD)流程优化等关键方面,本研究揭示了AI技术在解决传统软件测试痛点中的潜力与价值。文章首先概述了软件测试的重要性和当前面临的挑战,随后详细介绍了AI技术在测试用例生成、执行、结果分析及维护中的应用实例,并展望了未来AI与软件测试深度融合的趋势,强调了技术伦理与质量控制的重要性。本文为软件开发与测试团队提供了关于如何有效利用AI技术提升测试效能的实践指南。 ###
|
3天前
|
测试技术 Python
软件测试的艺术:从理论到实践的探索
【10月更文挑战第23天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将深入探讨软件测试的核心理念、方法和实践,揭示如何通过精心设计和执行测试来提高软件质量。我们将一起探索测试的不同阶段,包括单元测试、集成测试、系统测试和验收测试,以及它们如何相互补充,共同构建起一个坚实的质量保证体系。文章旨在启发读者思考如何在自己的项目中实施有效的测试策略,从而提升软件的可靠性和性能。
|
6天前
|
消息中间件 中间件 Kafka
解锁Kafka等消息队列中间件的测试之道
在这个数字化时代,分布式系统和消息队列中间件(如Kafka、RabbitMQ)已成为日常工作的核心组件。本次公开课由前字节跳动资深专家KK老师主讲,深入解析消息队列的基本原理、架构及测试要点,涵盖功能、性能、可靠性、安全性和兼容性测试,并探讨其主要应用场景,如应用解耦、异步处理和限流削峰。课程最后设有互动答疑环节,助你全面掌握消息队列的测试方法。
8 0
|
13天前
|
测试技术 PHP 开发工具
php性能监测模块XHProf安装与测试
【10月更文挑战第13天】php性能监测模块XHProf安装与测试
15 0
|
18天前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
29 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
192 7
Jmeter实现WebSocket协议的接口测试方法