mac 搭建kafka系列教程

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: mac 搭建kafka系列教程

新入手mac,当然是装各种软件啦

下面来记录一下使用mac安装kafka的过程,mac上面的homebrew是真的好用

下面我们来开始进入安装吧

安装环境基础 # jdk1.8 并且配置好环境变量

1.直接使用brew安装,安装过程会自动安装zookeeper

brew install kafka

效果如下

2. 安装位置以及配置文件路径都在图片上显示了,并且怎么启动也都告诉了我们

3. 安装位置

/usr/local/Cellar/zookeeper
/usr/local/Cellar/kafka

4.配置文件位置

/usr/local/etc/kafka/server.properties
/usr/local/etc/kafka/zookeeper.properties

5.现在没有出现报错基本已经成功百分之90了,下面就是进行测试了

6. 打开一个终端

#创建topic 
kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
#查看创建的topic
kafka-topics --list --zookeeper localhost:2181
#终端1发送消息
kafka-console-producer --broker-list localhost:9092 --topic test

新开一个终端

#终端2接受消息
kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning

此时,在终端1中输入信息,终端2会立即显示在屏幕上面,如有结果输出,即安装成功,更高级功能请参考官网

7.扩展

#指定分区消费消息
kafka-console-consumer --bootstrap-server localhost:9092 --topic test --partition 1 --from-beginning
#添加分区
kafka-topics --alter --zookeeper localhost:2181 --partitions 10  --topic test    //添加10个
#启动kafka,指定配置文件,后台启动并打印日志到 /usr/local/etc/kafka/kafka.log
 nohup kafka-server-start /usr/local/etc/kafka/server.properties > /usr/local/etc/kafka/kafka.log 2>&1 &

8.资料小扩展,本段为本人学习kafka时学到的小知识,不是很深但是很实用,经验不多,小弟也是刚入门,先分享为快

8.1 topic

# topic:
1.kafka集群会将每个topic进行分区,每个分区都是一个排序且不可改变的队列,新的消息会进入队尾并分配一个唯一ID,官方称之为偏移量(offset)
2.无论消息是否被消费,集群都会保留消息,有一个配置的时间(过期时间),超过这个时间后,消息会被清除
3.消费端唯一记录的元信息就是自己在topic中的位置(offset),
4.分布式的原因:第一集群可以容纳大量的数据 第二:可以并行的处理

8.2 消费语义的理解

at last once:至少消费一次(对一条消息有可能多次消费,有可能会造成重复消费数据)
     原因:Proudcer产生数据的时候,已经写入在broker中,但是由于broker的网络异常,没有返回ACK,这时Producer,认为数据没有写入成功,此时producer会再次写入,相当于一条数据,被写入了多次。
     
at most once:最多消费一次,对于消息,有可能消费一次,有可能一次也消费不了
    原因:producer在产生数据的时候,有可能写数据的时候不成功,此时broker就跳过这个消息,那么这条数据就会丢失,导致consumer无法消费。
    
exactly once:有且仅有一次。这种情况是我们所需要的,也就是精准消费一次。
 kafka中消费语义的场景
   at last once:可以先读取数据,处理数据,最后记录offset,当然如果在记录offset之前就crash,新的consumer会重复的来消费这条数据,导致了”最少一次“
   at most once:可以先读取数据,然后记录offset,最后在处理数据,这个方式,就有可能在offset后,还没有及时的处理数据,就crash了,导致了新的consumer继续从这个offset处理,那么刚刚还没来得及处理的数据,就永远不会被处理,导致了”最多消费一次“
   exactly once:可以通过将提交分成两个阶段来解决:保存了offset后提交一次,消息处理成功后,再提交一次。

8.3 消息一致性

kafka中如何实现精准写入数据?
A:Producer 端写入数据的时候保证幂等性操作:
幂等性:对于同一个数据无论操作多少次都只写入一条数据,如果重复写入,则执行不成功
B:broker写入数据的时候,保证原子性操作, 要么写入成功,要么写入失败。(不成功不断进行重试)

8.4 AckMode

先放上源码

/**
     * The offset commit behavior enumeration.
     */
    public enum AckMode {
        /**
         * Commit after each record is processed by the listener.
         */
        RECORD,
        /**
         * Commit whatever has already been processed before the next poll.
         */
        BATCH,
        /**
         * Commit pending updates after
         * {@link ContainerProperties#setAckTime(long) ackTime} has elapsed.
         */
        TIME,
        /**
         * Commit pending updates after
         * {@link ContainerProperties#setAckCount(int) ackCount} has been
         * exceeded.
         */
        COUNT,
        /**
         * Commit pending updates after
         * {@link ContainerProperties#setAckCount(int) ackCount} has been
         * exceeded or after {@link ContainerProperties#setAckTime(long)
         * ackTime} has elapsed.
         */
        COUNT_TIME,
        /**
         * User takes responsibility for acks using an
         * {@link AcknowledgingMessageListener}.
         */
        MANUAL,
        /**
         * User takes responsibility for acks using an
         * {@link AcknowledgingMessageListener}. The consumer is woken to
         * immediately process the commit.
         */
        MANUAL_IMMEDIATE,
    }

源码解读

RECORD
每处理一条commit一次
BATCH(默认)
每次poll的时候批量提交一次,频率取决于每次poll的调用频率
TIME 
每次间隔ackTime的时间去commit(跟auto commit interval有什么区别呢?)
COUNT 
累积达到ackCount次的ack去commit
COUNT_TIME
ackTime或ackCount哪个条件先满足,就commit
MANUAL
listener负责ack,但是背后也是批量上去
MANUAL_IMMEDIATE
listner负责ack,每调用一次,就立即commit

9.终结

以上就是我安装kafka时顺带学习的一点东西,并没有深入,所以总结的有点乱,看到什么就是记录的什么,更深层次的kafka知识请参阅大牛的文章或者官网阅读,敬请期待本人下次更新kafka相关知识!

目录
相关文章
|
6月前
|
Shell 网络安全 iOS开发
最好用的SSH工具Royal TSX for mac使用教程
众所周知,在 Windows上我们经常用到的shell工具可能非 xshell莫属了。但是xshell却并没有开发mac 版本,我们只能用其他的工具替代了。 在我用过几个ssh工具之后,我觉得在macOS上最好用的ssh工具客户端必须是 Royal TSX,它和使用xhell的感觉简直一模一样。 Royal TSX是一款功能非常强大适用于 Mac 的远程连接管理工具。兼容多种连接类型,比如:RDP、VNC、基于SSH连接的终端,SFTP/FTP/SCP或基于Web的连接管理,Royal TSX 都可以满足您的要求!
780 0
最好用的SSH工具Royal TSX for mac使用教程
|
6月前
|
Linux C++
百度搜索:蓝易云【Linux下C++ STL获取Mac地址教程】
请注意,获取MAC地址需要root权限,因此在运行代码时可能需要使用sudo权限。另外,不同的Linux发行版和内核版本可能会稍有差异,您可能需要根据您的具体环境进行适当的调整。
101 0
|
14天前
|
消息中间件 存储 Unix
Mac系统安装教程
Mac系统安装教程
25 1
Mac系统安装教程
|
1月前
|
应用服务中间件 Linux nginx
Mac os 安装 nginx 教程(success)
这篇文章是关于如何在Mac OS系统上使用Homebrew安装nginx及其依赖,并解决安装过程中可能出现的权限问题。
94 0
Mac os 安装 nginx 教程(success)
|
30天前
|
消息中间件 Kafka API
|
2月前
|
消息中间件 Kafka API
kafka使用教程
kafka使用教程
|
2月前
|
Shell 数据安全/隐私保护
Mac上HomeBrew安装及换源教程
【8月更文挑战第30天】这是在 Mac 上安装及更换 Homebrew 源的教程。首先通过终端执行命令 `/bin/bash -c "\$\(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh\)` 安装 Homebrew,并使用 `brew --version` 检查是否安装成功。接着可更换软件源以提高下载速度,例如设置中科大为源,并更新相关设置。这将有助于提升 Homebrew 的使用体验。
954 9
|
3月前
|
Windows
【科研技巧】Mac下使用SciDavis绘制科研论文图教程(安装及使用)
关于如何在Mac系统下使用SciDavis软件绘制科研论文所需的图表,包括安装指导和创建柱状图、折线图、扇形图的详细步骤教程。
279 1
|
5月前
|
消息中间件 Java Kafka
教程:Spring Boot集成Kafka Streams流处理框架
教程:Spring Boot集成Kafka Streams流处理框架
|
6月前
|
安全 Java iOS开发
MAC OS X 硬盘安装详细分解教程
MAC OS X 硬盘安装详细分解教程
226 1