Kafkað的丢失教程
#java #kotlin #springboot #kafka

介绍

我的意思是我有一篇博客文章,该文章是我一年前(2022年7月14日,是我的第一稿)。一天的第一点:跟随孩子。我之所以要尘土飞扬的原因可能是因为我在玩Zelda之类的东西。最近,我偶然发现了这些古老的文字,探索了卡夫卡的美好世界。在阅读了它的光荣文本后,我对这篇文章感到非常失望。我当时就像:“哦,男孩。现在我看着它,这有点丑陋”,尴尬的面孔对我写的东西感到厌恶。但是我仍将向世界分享。我正在为人们批评我的工作开设一个免费的欢迎场所。如果您一直在等待炸毁并告诉某人很烂,这是给您的朋友(或者这只是我是我最糟糕的评论家)。

但笑了,我认为这是一个很酷的机会,可以展示我一年前如何处理一个项目以及我现在采取的方法。因此,我将抛弃所有我认为足够好的旧东西,至少可以学到一些东西,然后我会回来一些更好的东西。对于上下文,我只是在我有一段时间之前使用Kafka构建一些微服务。但是,我认为如果您阅读任务并自己实施,那就更好了。然后,如果您愿意,请回来检查我如何比较项目的实现。这样,我们都可以学习更多。因此,如果您想跟随我,我将指定下面的作业供您浏览,然后我的实现。现在,请享受:路易斯·米兰达(Luis Miranda)和《迷失博客》的突袭者。

ps:这是针对所有在撰写此博客时给我回馈的同胞。我只想说,尽管我忽略了您的反馈,但我会记住续集ð。但是说真的,谢谢!


ð作业

大约两年前,在为客户工作时,有一个与卡夫卡有关的内部任务。当时,我和一些同事从事任务。现在回头看,我不太了解如何完成任务。它已经挑战学习kafka。但是最近看看,我决定再拍摄。

在分配作业之前,我会假设您知道春季,kafka(基本知识),docker和数据库。如果没有,请不要担心!我和你在同一条船上,我喜欢学习这些不同的技术。我将为您提供一些资源来审查和学习。

问题陈述

§§«设计并使用Spring Boot,Kafka,MySQL作为技术堆栈来设计并实施驱动程序微服务。该服务应该能够存储商店的GPS位置以及商店ID。该服务应该能够捕获驾驶员的lat/long。然后,对于给定的商店,该服务应能够返回以距离该商店距离排序的驾驶员列表,即,最接近商店的驾驶员应该是列表中的第一个条目。

这就是问题陈述的一般思想。现在让我们看一下应用程序应该执行的一些关键功能:

  • 服务应该能够通过 kafka事件 当前(最新)位置。
{
  "driverID": "m123@gmail.com",
  "latitude": 27.876,
  "longitude": -128.33
}
  • 服务应能够通过 REST API 进行存储配置。
{
  "storeID": "1234",
  "latitude": 27.876,
  "longitude": -128.33
}
  • 该服务应暴露于Get API,以获取商店周围的n个驱动程序。存储ID和N应作为API的查询参数。

    • 要计算商店和驾驶员最新位置之间的距离,请使用直线距离(乌鸦距离)。为简单起见,您可以使用坐标几何distance calculation formula
  • 该服务应公开邮政API以进行Kafka事件有效载荷并在Kafka中发布。

  • 即使通过Kafka命令行发布消息,该服务也应该能够从主题中消耗KAFKA消息。

系统准则

作业还指定了一些准则要如下:

  • 您可以自由选择将与DB,Kafka,API等相互作用的微服务及其组成模块的结构。

  • 与本文档一起提供了一个Docker组合文件。该文件已经需要Kafka,Zookeeper和MySQL的容器。

  • 春季启动服务应在端口号9080上运行。

  • 使用kafka主题名称â驱动器_location捕获当前位置。

  • 您决定适当的类名称,模块,REST API端点,DB架构。

这是Docker组成的文件:

项目组件

有了上述所有信息,我们有足够的时间开始构建我们的项目。在我们继续进行作业之前,我将提出广泛的想法和我们将要处理的所有组件。

卡夫卡

kafka将在该项目中发挥重要作用,因此我们必须对其有很好的了解。首先,我们将创建一个生产商,该制作人将将事件(又称消息/记录)发送到群集。该集群将持有诸如日志之类的驱动程序信息。接下来,我们将创建一个消费者,该消费者将在任何实时事件中收听指定的群集。考虑到这一点,我们将创建两个服务:生产者和消费者。

春季引导

生产商和消费者将成为Maven的春季启动项目。在从事这项任务时,我想学习一种新语言,即Kotlin。从大学起,我就一直和爪哇一起写作,所以我对此感到有些无聊。我认为这是学习新知识的新机会。与Kafka有关的一切都将在Kotlin。该项目的其余部分将在Java中。

mysql

这将是我们的主要数据库。我们将主要将其用于存储信息。我们将使用春季数据JPA作为持续技术。

评估

即使我没有提交该项目,该任务也对如何评估这一点也有一些指控。我认为,请记住这一点是一个好主意,以创建我们可以的最佳产品。

  • 您如何在时间/空间复杂性方面有效地解决给定问题。

  • REST API的延迟。

  • 编码标准,JUNIT覆盖范围,休息合规性,多模块Maven项目的结构,数据库设计(用于比例)。

  • 能够通过运行docker-compose noth而无需任何错误就可以在工作条件下启动服务。

结论

这个项目将分为部分,将有很多信息和代码要涵盖。另外,我将逐步更新我的GitHub,因此您可以在那里看到完整的项目,如果您也想继续工作,我将接受建议。