# Java 消息策略的实现 - Kafak 是怎么设计的

**URL:** <https://www.isharkfly.com/t/java-kafak/14999>\
**Category:** 职友\
**Tags:** java, 面经\
**Created:** [September 20, 2023, 1:57pm UTC](https://www.isharkfly.com/t/java-kafak/14999 "2023-09-20T13:57:01Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [September 20, 2023, 1:57pm UTC](https://www.isharkfly.com/t/java-kafak/14999/1 "2023-09-20T13:57:01Z")

</div>

这个也是开放讨论题，主要讨论下 Kafka 在消息中是如何进行实现的。

 ![1_cCyPNzf95ygMFUgsrleHtw](https://cdn.isharkfly.com/com-isharkfly-www/discourse-uploads/original/2X/c/c3a2e0fb29fa69e600e530c414e8695057dc23ec.png)

## 总结

这个题目的开发性太强了。

Kafka 可以用的地方非常多，我经历过的项目有 Kafka 用在消息处理策略上的。这个主要是 IoT 项目，因为这个项目需要对温度传感器采集获得数据。

当我们有多个数据采集点的时候，通常是在每分钟发送几条数据的样子。

哪怕是这种使用场景，我觉得从系统架构的考虑来说还是过于臃肿了，因为 Kafka 的运行需要 ZooKeeper，一套 ZooKeeper 的运行至少是需要 3 台服务器。

正常的生产环境部署，我们可能要部署到 5 太服务器上。

对于一个每秒钟消息都不到 1 条的消息服务器来说，实在是太重了。

其实这种使用场景，我们可以用一些轻量的消息服务器，比如说 ActiveMQ，我就觉得非常好。

可以简单到使用一个 Docker 容器就可以完成了，但消息处理能力也还是强大的。

对于 Kafka 这种野兽级的消息处理服务器，实在是用不上。

### 缓存

我们还经历过一个项目，Kafka 被用作缓存了。

每次项目启动的时候，都需要从 Kafka 上获得缓存数据，然后系统才能运行。

这个也是非常痛苦的，有时候因为缓存机制的使用不确定，导致部分时候的数据缓存上没有。

然后在调试的过程中就非常的痛苦。

### 面试回答

根据上面的情况，对这开放性的问题，通常只需要说说你对问题的了解情况就好了。

一般来说还是不会要求你做到具体的实现的，只要你对消息服务器有一些相关的知识，上面的 2 个使用案例还是比较经典的。

其实消息服务器还有很多可以使用的场景，比如说数据解耦，对爬虫数据的数据解耦等等，都是可以用的。

很多公司还会做一个消息服务器，比如说对订阅用户的消息回复，手机消息推送等等，都需要我们的消息服务器去处理。

所以这个问题为设计型问题，只需要对相关问题有所了解即可。
