小编Sas*_*ash的帖子

Spark流媒体+ Kafka vs Just Kafka

为什么以及何时会选择使用Kafka的Spark流媒体?

假设我有一个系统通过Kafka每秒获得数千条消息.我需要对这些消息应用一些实时分析,并将结果存储在数据库中.

我有两个选择:

  1. 创建我自己的工作人员,从Kafka读取消息,运行分析算法并将结果存储在DB中.在Docker时代,只需使用scale命令就可以轻松地在整个集群中扩展此工作程序.我只需要确保我的分区数量等于或大于我的工作者,并且一切都很好并且我有一个真正的并发性.

  2. 使用Kafka流输入创建Spark群集.让Spark集群进行分析计算,然后存储结果.

有没有第二种选择是更好的选择?听起来像是一个额外的开销.

apache-kafka apache-spark spark-streaming spark-streaming-kafka

13
推荐指数
1
解决办法
1862
查看次数

Ruby内存泄漏(MRI)

我必须遗漏一些东西,但我在Ruby中编写的每个应用程序似乎都在泄漏一些内存.我使用Ruby MRI 2.3,但我看到与其他版本相同的行为.

每当我编写一个在循环中执行某些操作的测试应用程序时,它就会慢慢泄漏内存.

while true
   #do something
   sleep 0.1
end
Run Code Online (Sandbox Code Playgroud)

例如,我可以写入数组然后在循环中清理它,或者只发送http post请求.

这只是一个例子,但我有很多这样的例子:

require 'net/http'
require 'json'
require 'openssl'

class Tester

    def send_http some_json
        begin
            @uri = URI('SERVER_URL')
            @http = Net::HTTP.new(@uri.host, @uri.port)
            @http.use_ssl = true
            @http.keep_alive_timeout = 10
            @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
            @http.read_timeout = 30
            @req = Net::HTTP::Post.new(@uri.path, 'Content-Type' => 'application/json')
            @req.body = some_json.to_json
            res = @http.request(@req)
        rescue Exception => e  
                puts e.message  
                puts e.backtrace.inspect  
        end
    end

    def run
        while true
            some_json = {"name": "My name"}
            send_http(some_json)
            sleep 0.1
        end …
Run Code Online (Sandbox Code Playgroud)

ruby memory-leaks

8
推荐指数
1
解决办法
349
查看次数

(Golang) 干净的架构 - 谁应该进行编排?

我试图了解以下两个选项中哪一个是正确的方法以及原因。

\n\n

假设我们有GetHotelInfo(hotel_id)从 Web 到控制器调用的 API。

\n\n

GetHotelInfo的逻辑是:

\n\n
    \n
  1. 调用GetHotelPropertyData()(位置、设施\xe2\x80\xa6)
  2. \n
  3. 调用GetHotelPrice(hotel_id, dates\xe2\x80\xa6)
  4. \n
  5. 调用GetHotelReviews(hotel_id)
  6. \n
\n\n

一旦所有结果返回,处理并合并数据并返回 1 个包含酒店所有相关数据的对象。

\n\n

选项1

\n\n

\n\n
    \n
  • 创建 3 个不同的存储库(HotelPropertyRepo、HotelPriceRepo、\nHotelReviewsRepo)

  • \n
  • 创建将使用这 3 个存储库并\n返回最终结果的 GetHotelInfo 用例。

  • \n
\n\n

选项 2

\n\n

\n\n
    \n
  • 创建 3 个不同的存储库(HotelPropertyRepo、HotelPriceRepo、\nHotelReviewsRepo)

  • \n
  • 创建 3 个不同的用例(GetHotelPropertyDataUseCase、\nGetHotelPriceUseCase、GetHotelReviewsUseCase)

  • \n
  • 创建 GetHotelInfoUseCase 来编排前 3 个\n用例。(它也可以是一个控制器,但是\xe2\x80\x99是一个不同的主题)

  • \n
\n\n

让\xe2\x80\x99s 说现在只GetHotelInfo暴露在Web 上,但也许将来我也会暴露一些内部请求。

\n\n

如果 GetHotelInfo 的实际逻辑不是 3 个端点的组合而是 10 个端点的组合,答案会有所不同吗?

\n

architecture model-view-controller use-case go clean-architecture

5
推荐指数
1
解决办法
2673
查看次数

多线程 + Ruby 数组

我发现很难理解在 Ruby 中使用多个线程插入数组是否安全。

据我了解 Ruby 数组,就像任何其他对象一样不是线程安全的。但这是否意味着插入数组也不安全?

例如,我有以下代码:

arr=[]
threads = []

for i in 1..5
    threads << Thread.new do
        for j in 1..1000
            arr << ((1000 * i) + j)
        end
    end
end

threads.each(&:join)

puts arr.length
Run Code Online (Sandbox Code Playgroud)

它只旋转 5 个线程,每个线程将 1000 个数字推送到数组中。看起来结果总是一致的,我总是得到数组中 5000 个元素的结果。

那么这样做安全吗?

ruby arrays multithreading

1
推荐指数
1
解决办法
1555
查看次数