เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เดนเดฒเต‹, เดนเดฌเตเตผ! เด‡เดจเตเดจเต เดžเด™เตเด™เตพ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด• เดธเดจเตเดฆเต‡เดถ เดธเตเดŸเตเดฐเต€เดฎเตเด•เตพ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดซเดฒเด™เตเด™เตพ AWS RDS เด•เตเดฒเต—เดกเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตฝ เดŽเดดเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด•เตเดฐเต†เดกเดฟเดฑเตเดฑเต เดธเตเดฅเดพเดชเดจเด‚ เด…เดคเดฟเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เดถเดพเด–เด•เดณเดฟเดฒเตเดฎเตเดณเตเดณ เด‡เตปเด•เดฎเดฟเด‚เด—เต เด‡เดŸเดชเดพเดŸเตเด•เตพ "เดˆเดšเตเดšเดฏเดฟเตฝ" เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดšเตเดฎเดคเดฒ เดžเด™เตเด™เดณเต† เดธเดœเตเดœเดฎเดพเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดธเด™เตเด•เตฝเดชเตเดชเดฟเด•เตเด•เตเด•. เดŸเตเดฐเดทเดฑเดฟเดฏเตเดŸเต† เด“เดชเตเดชเตบ เด•เดฑเตปเดธเดฟ เดธเตเดฅเดพเดจเด‚, เด‡เดŸเดชเดพเดŸเตเด•เตพเด•เตเด•เตเดณเตเดณ เดชเดฐเดฟเดงเดฟเด•เตพ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดธเดพเดฎเตเดชเดคเตเดคเดฟเด• เดซเดฒเด™เตเด™เตพ เดฎเตเดคเดฒเดพเดฏเดต เดชเต†เดŸเตเดŸเต†เดจเตเดจเต เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดพเตป เด‡เดคเต เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจเดคเดพเดฃเต.

เดฎเดพเดจเตเดคเตเดฐเดฟเด•เดตเตเด‚ เดฎเดพเดจเตเดคเตเดฐเดฟเด• เดฎเดจเตเดคเตเดฐเด™เตเด™เดณเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดคเต† เดˆ เด•เต‡เดธเต เดŽเด™เตเด™เดจเต† เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเด‚ - เด•เดŸเตเดŸเดฟเดจเต เด•เต€เดดเดฟเตฝ เดตเดพเดฏเดฟเด•เตเด•เตเด•! เดชเต‹เด•เต‚!

เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚
(เดšเดฟเดคเตเดฐเดคเตเดคเดฟเดจเตเดฑเต† เด‰เดฑเดตเดฟเดŸเด‚)

เด†เดฎเตเด–เด‚

เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดตเดฒเดฟเดฏ เด…เดณเดตเดฟเดฒเตเดณเตเดณ เดกเดพเดฑเตเดฑ เดคเดคเตเดธเดฎเดฏเด‚ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เด†เดงเตเดจเดฟเด• เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดงเดพเดฐเดพเดณเด‚ เด…เดตเดธเดฐเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเต. เด‡เดคเดฟเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดœเดจเดชเตเดฐเดฟเดฏเดฎเดพเดฏ เด•เต‹เดฎเตเดชเดฟเดจเต‡เดทเดจเตเด•เดณเดฟเดฒเตŠเดจเตเดจเดพเดฃเต เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเดŸเต†เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตเดฑเต†เดฏเตเด‚ เดธเด‚เดฏเต‹เดœเดจเด‚, เด…เดตเดฟเดŸเต† เด•เดพเดซเตเด• เด‡เตปเด•เดฎเดฟเด‚เด—เต เดธเดจเตเดฆเต‡เดถ เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเตเดŸเต† เด’เดฐเต เดธเตเดŸเตเดฐเต€เด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดˆ เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเต† เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เดธเดฎเดฏ เด‡เดŸเดตเต‡เดณเดฏเดฟเตฝ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดคเต†เดฑเตเดฑเต เดธเดนเดฟเดทเตเดฃเตเดค เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดšเต†เด•เตเด•เต เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚. เดˆ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดŽเดžเตเดšเดฟเดจเต เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเดŸ เดกเดพเดฑเตเดฑ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เต‡เดฃเตเดŸเดฟเดตเดฐเตเดฎเตเดชเต‹เตพ, เด…เดตเดธเดพเดจ เดšเต†เด•เตเด•เต เดชเต‹เดฏเดฟเดจเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดคเดฟเดฐเดฟเด•เต† เดชเต‹เดฏเดฟ เด…เดตเดฟเดŸเต† เดจเดฟเดจเตเดจเต เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เตพ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเดšเตเดšเดพเตฝ เดฎเดคเดฟเดฏเดพเด•เตเด‚.

เดตเดฟเด•เดธเดฟเดค เดธเด‚เดตเดฟเดงเดพเดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเดพเดธเตเดคเตเดตเดฟเดฆเตเดฏ

เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เด‰เดชเดฏเต‹เด—เดฟเดšเตเดš เด˜เดŸเด•เด™เตเด™เตพ:

  • เด…เดชเตเดชเดพเดšเตเดš เด•เดพเดซเตเด• เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เตฝ-เดธเดฌเตโ€Œเดธเตโ€Œเด•เตเดฐเตˆเดฌเต เดธเดจเตเดฆเต‡เดถเดฎเดฏเดฏเตโ€Œเด•เตเด•เตฝ เดธเด‚เดตเดฟเดงเดพเดจเดฎเดพเดฃเต. เด“เดซเตโ€Œเดฒเตˆเดจเตเด‚ เด“เตบเดฒเตˆเตป เดธเดจเตเดฆเต‡เดถ เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเดจเตเด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเด‚. เดกเดพเดฑเตเดฑ เดจเดทเตโ€ŒเดŸเดฎเดพเด•เดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป, เด•เดพเดซเตเด• เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เดกเดฟเดธเตเด•เดฟเตฝ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดณเตเดณเดฟเตฝ เดชเด•เตผเดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. ZooKeeper เดธเดฟเตปเด•เตเดฐเตŠเดฃเตˆเดธเต‡เดทเตป เดธเต‡เดตเดจเดคเตเดคเดฟเดจเต เดฎเตเด•เดณเดฟเดฒเดพเดฃเต เด•เดพเดซเตเด• เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต;
  • เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต - เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดธเตเดชเดพเตผเด•เตเด•เต เด˜เดŸเด•เด‚. เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดฎเตŠเดกเตเดฏเต‚เตพ เด’เดฐเต เดฎเตˆเด•เตเดฐเต‹ เดฌเดพเดšเตเดšเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต, เด‡เดตเดฟเดŸเต† เดกเดพเดฑเตเดฑ เดธเตเดŸเตเดฐเต€เด‚ เดšเต†เดฑเดฟเดฏ เดกเดพเดฑเตเดฑ เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเตเดŸเต† เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดถเตเดฐเต‡เดฃเดฟเดฏเดพเดฏเดฟ เดตเตเดฏเดพเด–เตเดฏเดพเดจเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดตเตเดฏเดคเตเดฏเดธเตโ€Œเดค เดธเตเดฐเต‹เดคเดธเตเดธเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเดพเดฑเตเดฑ เดŽเดŸเตเดคเตเดคเต เดšเต†เดฑเดฟเดฏ เดชเดพเด•เตเด•เต‡เดœเตเด•เดณเดพเดฏเดฟ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เด•เตƒเดคเตเดฏเดฎเดพเดฏ เด‡เดŸเดตเต‡เดณเด•เดณเดฟเตฝ เดชเตเดคเดฟเดฏ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เด“เดฐเต‹ เดธเดฎเดฏ เด‡เดŸเดตเต‡เดณเดฏเตเดŸเต†เดฏเตเด‚ เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ, เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเดพเด•เตเด•เดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เด† เด‡เดŸเดตเต‡เดณเดฏเดฟเตฝ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจ เดเดคเต เดกเดพเดฑเตเดฑเดฏเตเด‚ เดชเดพเด•เตเด•เดฑเตเดฑเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเด‚. เด‡เดŸเดตเต‡เดณเดฏเตเดŸเต† เด…เดตเดธเดพเดจเด‚, เดชเดพเด•เตเด•เดฑเตเดฑเต เดตเดณเตผเดšเตเดš เดจเดฟเตผเดคเตเดคเตเดจเตเดจเต. เด‡เดŸเดตเต‡เดณเดฏเตเดŸเต† เดตเดฒเตเดชเตเดชเด‚ เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฌเดพเดšเตเดšเต เด‡เดŸเดตเต‡เดณ เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดพเดฃเต;
  • เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เต SQL - เดฑเดฟเดฒเต‡เดทเดฃเตฝ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดซเด‚เด—เตเดทเดฃเตฝ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เตเด‚ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เด˜เดŸเดจเดพเดชเดฐเดฎเดพเดฏ เดกเดพเดฑเตเดฑ เดŽเดจเตเดจเดพเตฝ เด’เดฐเต เดธเตเด•เต€เดฎ เด‰เดณเตเดณ เดกเดพเดฑเตเดฑ เดŽเดจเตเดจเดพเดฃเต เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต, เด…เดคเดพเดฏเดคเต เดŽเดฒเตเดฒเดพ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพเด•เตเด•เตเดฎเดพเดฏเดฟ เด’เดฐเตŠเดฑเตเดฑ เดธเต†เดฑเตเดฑเต เดซเต€เตฝเดกเตเด•เตพ. เดตเดฟเดตเดฟเดง เด˜เดŸเดจเดพเดชเดฐเดฎเดพเดฏ เดกเดพเดฑเตเดฑเดพ เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด‡เตปเดชเตเดŸเตเดŸเดฟเดจเต† Spark SQL เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดธเตเด•เต€เดฎ เดตเดฟเดตเดฐเด™เตเด™เดณเตเดŸเต† เดฒเดญเตเดฏเดคเดฏเตเด•เตเด•เต เดจเดจเตเดฆเดฟ, เด…เดคเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เดณเตเดŸเต† เดซเต€เตฝเดกเตเด•เตพ เดฎเดพเดคเตเดฐเด‚ เด•เดพเดฐเตเดฏเด•เตเดทเดฎเดฎเดพเดฏเดฟ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เด•เต‚เดŸเดพเดคเต† DataFrame API-เด•เดณเตเด‚ เดจเตฝเด•เตเดจเตเดจเต;
  • AWS RDS เดคเดพเดฐเดคเดฎเตเดฏเต‡เดจ เดšเต†เดฒเดตเตเด•เตเดฑเดžเตเดž เด•เตเดฒเต—เดกเต เด…เดงเดฟเดทเตโ€Œเด เดฟเดค เดฑเดฟเดฒเต‡เดทเดฃเตฝ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด†เดฃเต, เดธเต†เดฑเตเดฑเดชเตเดชเต, เด“เดชเตเดชเดฑเต‡เดทเตป, เดธเตเด•เต†เดฏเดฟเดฒเดฟเด‚เด—เต เดŽเดจเตเดจเดฟเดต เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจ เดตเต†เดฌเต เดธเต‡เดตเดจเด‚, เด†เดฎเดธเต‹เตบ เดจเต‡เดฐเดฟเดŸเตเดŸเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด•เดพเดซเตเด• เดธเต†เตผเดตเตผ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด•เดพเดซเตเด• เดจเต‡เดฐเดฟเดŸเตเดŸเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดœเดพเดต เด‰เดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด•เดพเดฐเดฃเด‚... เดœเต‹เดฒเดฟเด•เตเด•เดพเดฏเดฟ JVM เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต:

sudo apt-get update 
sudo apt-get install default-jre
java -version

เด•เดพเดซเตเด•เดฏเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดชเตเดคเดฟเดฏ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚:

sudo useradd kafka -m
sudo passwd kafka
sudo adduser kafka sudo

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด”เดฆเตเดฏเต‹เด—เดฟเด• เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด• เดตเต†เดฌเตเดธเตˆเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฟเดคเดฐเดฃเด‚ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•:

wget -P /YOUR_PATH "http://apache-mirror.rbc.ru/pub/apache/kafka/2.2.0/kafka_2.12-2.2.0.tgz"

เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดค เด†เตผเด•เตเด•เตˆเดตเต เด…เตบเดชเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•:

tar -xvzf /YOUR_PATH/kafka_2.12-2.2.0.tgz
ln -s /YOUR_PATH/kafka_2.12-2.2.0 kafka

เด…เดŸเตเดคเตเดค เด˜เดŸเตเดŸเด‚ เด“เดชเตเดทเดฃเตฝ เด†เดฃเต. เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเดŸเต† เดŽเดฒเตเดฒเดพ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเตเด‚ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ เดŽเดจเตเดจเดคเดพเดฃเต เดตเดธเตเดคเตเดค. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต เดตเดฟเดทเดฏเด‚, เดตเดฟเดญเดพเด—เด‚, เด—เตเดฐเต‚เดชเตเดชเต เดŽเดจเตเดจเดฟเดต เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•. เด‡เดคเต เดฎเดพเดฑเตเดฑเดพเตป, เดจเดฎเตเด•เตเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ เดŽเดกเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเด‚:

vim ~/kafka/config/server.properties

เดซเดฏเดฒเดฟเดจเตเดฑเต† เด…เดตเดธเดพเดจเด‚ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เดšเต‡เตผเด•เตเด•เตเด•:

delete.topic.enable = true

เด•เดพเดซเตเด• เดธเต†เตผเดตเตผ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, เดจเดฟเด™เตเด™เตพ ZooKeeper เดธเต†เตผเดตเตผ เด†เดฐเด‚เดญเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต; เดžเด™เตเด™เตพ เด•เดพเดซเตเด• เดตเดฟเดคเดฐเดฃเดคเตเดคเต‹เดŸเตŠเดชเตเดชเด‚ เดตเดฐเตเดจเตเดจ เดธเดนเดพเดฏ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚:

Cd ~/kafka
bin/zookeeper-server-start.sh config/zookeeper.properties

ZooKeeper เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เด†เดฐเด‚เดญเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚, เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดŸเต†เตผเดฎเดฟเดจเดฒเดฟเตฝ เด•เดพเดซเตเด• เดธเต†เตผเดตเตผ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•:

bin/kafka-server-start.sh config/server.properties

เด‡เดŸเดชเดพเดŸเต เดŽเดจเตเดจ เดชเต‡เดฐเดฟเตฝ เด’เดฐเต เดชเตเดคเดฟเดฏ เดตเดฟเดทเดฏเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚:

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

เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเดพเตผเดŸเตเดŸเต€เดทเดจเตเด•เดณเตเด‚ เดฑเต†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด‚ เด‰เดณเตเดณ เด’เดฐเต เดตเดฟเดทเดฏเด‚ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเด‚:

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

เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เดชเตเดคเตเดคเดพเดฏเดฟ เดธเตƒเดทเตเดŸเดฟเดšเตเดš เดตเดฟเดทเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ เดจเดฟเตผเดฎเตเดฎเดพเดคเดพเดตเดฟเดจเต†เดฏเตเด‚ เด‰เดชเดญเต‹เด•เตเดคเดพเดตเดฟเดจเต†เดฏเตเด‚ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจ เดจเดฟเดฎเดฟเดทเด™เตเด™เตพ เดจเดฎเตเด•เตเด•เต เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเดคเตเดคเดพเด‚. เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดŽเด™เตเด™เดจเต† เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เด”เดฆเตเดฏเต‹เด—เดฟเด• เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต - เด•เตเดฑเดšเตเดšเต เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เตเด•. เดถเดฐเดฟ, เด•เดพเดซเตเด• เดชเตเดฐเตŠเดกเตเดฏเต‚เดธเตผ เดŽเดชเดฟเด เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตˆเดคเตเดคเดฃเดฟเตฝ เด’เดฐเต เดชเตเดฐเตŠเดกเตเดฏเต‚เดธเตผ เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเดฒเต‡เด•เตเด•เต เดžเด™เตเด™เตพ เดจเต€เด™เตเด™เตเดจเตเดจเต.

เดจเดฟเตผเดฎเตเดฎเดพเดคเดพเดตเดฟเดจเตเดฑเต† เดŽเดดเตเดคเตเดคเต

เดจเดฟเตผเดฎเตเดฎเดพเดคเดพเดตเต เด•เตเดฐเดฎเดฐเดนเดฟเดคเดฎเดพเดฏ เดกเดพเดฑเตเดฑ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด‚ - เด“เดฐเต‹ เดธเต†เด•เตเด•เตปเดกเดฟเดฒเตเด‚ 100 เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ. เดฑเดพเตปเดกเด‚ เดกเดพเดฑเตเดฑ เดŽเดจเตเดจเดคเตเด•เตŠเดฃเตเดŸเต เดžเด™เตเด™เตพ เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต เดฎเต‚เดจเตเดจเต เดซเต€เตฝเดกเตเด•เตพ เด…เดŸเด™เตเด™เตเดจเตเดจ เด’เดฐเต เดจเดฟเด˜เดฃเตเดŸเต เด†เดฃเต:

  • เดถเดพเด– - เด•เตเดฐเต†เดกเดฟเดฑเตเดฑเต เดธเตเดฅเดพเดชเดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเตฝเดชเตเดชเดจ เดชเต‹เดฏเดฟเดจเตเดฑเดฟเดจเตเดฑเต† เดชเต‡เดฐเต;
  • เด•เดฑเตปเดธเดฟ - เด‡เดŸเดชเดพเดŸเต เด•เดฑเตปเดธเดฟ;
  • เดคเตเด• - เด‡เดŸเดชเดพเดŸเต เดคเตเด•. เดฌเดพเด™เตเด•เดฟเดจเตเดฑเต† เด•เดฑเตปเดธเดฟ เดตเดพเด™เตเด™เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เดคเตเด• เดชเต‹เดธเดฟเดฑเตเดฑเต€เดตเต เดจเดฎเตเดชเดฑเตเด‚ เดตเดฟเตฝเดชเตเดชเดจเดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เดจเต†เด—เดฑเตเดฑเต€เดตเต เดจเดฎเตเดชเดฑเตเด‚ เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚.

เดจเดฟเตผเดฎเตเดฎเดพเดคเดพเดตเดฟเดจเตเดณเตเดณ เด•เต‹เดกเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

from numpy.random import choice, randint

def get_random_value():
    new_dict = {}

    branch_list = ['Kazan', 'SPB', 'Novosibirsk', 'Surgut']
    currency_list = ['RUB', 'USD', 'EUR', 'GBP']

    new_dict['branch'] = choice(branch_list)
    new_dict['currency'] = choice(currency_list)
    new_dict['amount'] = randint(-100, 100)

    return new_dict

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด…เดฏเดฏเตเด•เตเด•เตฝ เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดžเด™เตเด™เตพ เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต, เดžเด™เตเด™เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดตเดฟเดทเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต, JSON เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเตฝ:

from kafka import KafkaProducer    

producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
                             value_serializer=lambda x:dumps(x).encode('utf-8'),
                             compression_type='gzip')
my_topic = 'transaction'
data = get_random_value()

try:
    future = producer.send(topic = my_topic, value = data)
    record_metadata = future.get(timeout=10)
    
    print('--> The message has been sent to a topic: 
            {}, partition: {}, offset: {}' 
            .format(record_metadata.topic,
                record_metadata.partition,
                record_metadata.offset ))   
                             
except Exception as e:
    print('--> It seems an Error occurred: {}'.format(e))

finally:
    producer.flush()

เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดŸเต†เตผเดฎเดฟเดจเดฒเดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เดฒเดญเดฟเด•เตเด•เตเด‚:

เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เด‡เดคเดฟเดจเตผเดคเตเดฅเด‚ เดŽเดฒเตเดฒเดพเด‚ เดจเดฎเตเดฎเตพ เด†เด—เตเดฐเดนเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดพเดฃเต - เดจเดฟเตผเดฎเตเดฎเดพเดคเดพเดตเต เดจเดฎเตเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดตเดฟเดทเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
เดธเตเดชเดพเตผเด•เตเด•เต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดคเต เดˆ เดธเดจเตเดฆเต‡เดถ เดธเตเดŸเตเดฐเต€เด‚ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจเดคเดพเดฃเต เด…เดŸเตเดคเตเดค เด˜เดŸเตเดŸเด‚.

เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด…เดชเตเดชเดพเดšเตเดšเต† เดธเตเดชเดพเตผเด•เตเด•เต เดธเดพเตผเดตเดคเตเดฐเดฟเด•เดตเตเด‚ เด‰เดฏเตผเดจเตเดจ เดชเตเดฐเด•เดŸเดจเดฎเตเดณเตเดณเดคเตเดฎเดพเดฏ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เด•เดฎเตเดชเตเดฏเต‚เดŸเตเดŸเดฟเด‚เด—เต เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเดพเดฃเต.

เด‡เดจเตเดฑเดฑเดพเด•เตเดŸเต€เดตเต เด•เตเดตเดฑเดฟเด•เดณเตเด‚ เดธเตเดŸเตเดฐเต€เด‚ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚ เด‰เตพเดชเตเดชเต†เดŸเต† เดตเดฟเดถเดพเดฒเดฎเดพเดฏ เด•เดฎเตเดชเตเดฏเต‚เดŸเตเดŸเต‡เดทเตป เดคเดฐเด™เตเด™เดณเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตโ€Œเด•เตเด•เตเดฎเตเดชเต‹เตพ MapReduce เดฎเต‹เดกเดฒเดฟเดจเตเดฑเต† เดœเดจเดชเตเดฐเดฟเดฏ เดจเดฟเตผเดตเตเดตเดนเดฃเด™เตเด™เดณเต‡เด•เตเด•เดพเตพ เดฎเดฟเด•เดšเตเดš เดชเตเดฐเด•เดŸเดจเด‚ Spark เดจเดŸเดคเตเดคเตเดจเตเดจเต. เดตเดฒเดฟเดฏ เด…เดณเดตเดฟเดฒเตเดณเตเดณ เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เดตเต‡เด—เดค เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดชเด™เตเด•เต เดตเดนเดฟเด•เตเด•เตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ เด‡เดคเต เดฎเดฟเดจเดฟเดฑเตเดฑเตเด•เดณเต‹ เดฎเดฃเดฟเด•เตเด•เต‚เดฑเตเด•เดณเต‹ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เดพเดคเต† เดธเด‚เดตเต‡เดฆเดจเดพเดคเตเดฎเด•เดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เดตเต‡เด—เดคเดฏเดพเดฃเต. เดธเตเดชเดพเตผเด•เตเด•เดฟเดจเตเดฑเต† เดเดฑเตเดฑเดตเตเด‚ เดตเดฒเดฟเดฏ เดถเด•เตเดคเดฟเด•เดณเดฟเดฒเตŠเดจเตเดจเต, เดฎเต†เดฎเตเดฎเดฑเดฟเดฏเดฟเตฝ เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เตพ เดจเดŸเดคเตเดคเดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเดพเดฃเต.

เดˆ เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต เดธเตเด•เดพเดฒเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เตพ เด†เดฆเตเดฏเด‚ เด‡เดคเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

sudo apt-get install scala

เด”เดฆเตเดฏเต‹เด—เดฟเด• เดตเต†เดฌเตเดธเตˆเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเดชเดพเตผเด•เตเด•เต เดตเดฟเดคเดฐเดฃเด‚ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด•:

wget "http://mirror.linux-ia64.org/apache/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz"

เด†เตผเด•เตเด•เตˆเดตเต เด…เตบเดชเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•:

sudo tar xvf spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz -C /usr/local/spark

เดฌเดพเดทเต เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เดธเตเดชเดพเตผเด•เตเด•เดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดค เดšเต‡เตผเด•เตเด•เตเด•:

vim ~/.bashrc

เดŽเดกเดฟเดฑเตเดฑเดฑเดฟเดฒเต‚เดŸเต† เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดตเดฐเดฟเด•เตพ เดšเต‡เตผเด•เตเด•เตเด•:

SPARK_HOME=/usr/local/spark
export PATH=$SPARK_HOME/bin:$PATH

bashrc-เตฝ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเดฟเดฏ เดถเต‡เดทเด‚ เดคเดพเดดเต†เดฏเตเดณเตเดณ เด•เดฎเดพเตปเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•:

source ~/.bashrc

AWS PostgreSQL เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเต

เดธเตเดŸเตเดฐเต€เดฎเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดค เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต. เด‡เดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ AWS RDS เดธเต‡เดตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚.

AWS เด•เตบเดธเต‹เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด• -> AWS RDS -> เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเด•เตพ -> เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•:
เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

PostgreSQL เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเต เด…เดŸเตเดคเตเดคเดคเต เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเด•:
เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เด•เดพเดฐเดฃเด‚ เดˆ เด‰เดฆเดพเดนเดฐเดฃเด‚ เดตเดฟเดฆเตเดฏเดพเดญเตเดฏเดพเดธ เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เต เดฎเดพเดคเตเดฐเดฎเตเดณเตเดณเดคเดพเดฃเต; เดžเด™เตเด™เตพ "เด•เตเดฑเดžเตเดžเดคเต" (เดซเตเดฐเต€ เดŸเดฏเตผ) เด’เดฐเต เดธเต—เดœเดจเตเดฏ เดธเต†เตผเดตเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚:
เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดซเตเดฐเต€ เดŸเดฏเตผ เดฌเตเดฒเต‹เด•เตเด•เดฟเตฝ เดžเด™เตเด™เตพ เด’เดฐเต เดŸเดฟเด•เตเด•เต เด‡เดŸเตเดจเตเดจเต, เด…เดคเดฟเดจเตเดถเต‡เดทเด‚ เดžเด™เตเด™เตพเด•เตเด•เต t2.micro เด•เตเดฒเดพเดธเดฟเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดธเตเดตเดฏเดฎเต‡เดต เด“เดซเตผ เดšเต†เดฏเตเดฏเตเด‚ - เดฆเตเตผเดฌเดฒเดฎเดพเดฃเต†เด™เตเด•เดฟเดฒเตเด‚, เด‡เดคเต เดธเต—เดœเดจเตเดฏเดตเตเด‚ เดžเด™เตเด™เดณเตเดŸเต† เดšเตเดฎเดคเดฒเดฏเตเด•เตเด•เต เดคเดฟเด•เดšเตเดšเตเด‚ เด…เดจเตเดฏเต‹เดœเตเดฏเดตเตเดฎเดพเดฃเต:
เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ เดตเดณเดฐเต† เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เด•เดพเดฐเตเดฏเด™เตเด™เตพ เดตเดฐเตเดจเตเดจเต: เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดชเต‡เดฐเต, เดชเตเดฐเดงเดพเดจ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† เดชเต‡เดฐเตเด‚ เด…เดตเดจเตเดฑเต† เดชเดพเดธเตโ€Œเดตเต‡เดกเตเด‚. เดจเดฎเตเด•เตเด•เต เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต เดชเต‡เดฐเดฟเดŸเดพเด‚: myHabrTest, เดชเตเดฐเดงเดพเดจ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต: เดนเดฌเตเตผ, password: habr12345 เด…เดŸเตเดคเตเดค เดฌเดŸเตเดŸเดฃเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•:
เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เด…เดŸเตเดคเตเดค เดชเต‡เดœเดฟเตฝ เดชเตเดฑเดคเตเดคเตเดจเดฟเดจเตเดจเตเดณเตเดณ เดžเด™เตเด™เดณเตเดŸเต† เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดชเตเดฐเดตเต‡เดถเดจเด•เตเดทเดฎเดคเดฏเตเด•เตเด•เตเด‚ (เดชเตŠเดคเต เดชเตเดฐเดตเต‡เดถเดจเด•เตเดทเดฎเดค) เดชเต‹เตผเดŸเตเดŸเต เดฒเดญเตเดฏเดคเดฏเตเด•เตเด•เตเด‚ เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเดฎเตเดณเตเดณ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด‰เดฃเตเดŸเต:

เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

VPC เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เด—เตเดฐเต‚เดชเตเดชเดฟเดจเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดชเตเดคเดฟเดฏ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚, เด…เดคเต เดชเต‹เตผเดŸเตเดŸเต 5432 (PostgreSQL) เดตเดดเดฟ เดžเด™เตเด™เดณเตเดŸเต† เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เดฌเดพเดนเตเดฏ เด†เด•เตเดธเดธเต เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด‚.
VPC เดกเดพเดทเตโ€Œเดฌเต‹เตผเดกเต -> เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เด—เตเดฐเต‚เดชเตเดชเตเด•เตพ -> เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เด—เตเดฐเต‚เดชเตเดชเต เดธเต†เด•เตเดทเดจเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดฌเตเดฐเต—เดธเตผ เดตเดฟเตปเดกเต‹เดฏเดฟเดฒเต† AWS เด•เตบเดธเต‹เดณเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚:
เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เด—เตเดฐเต‚เดชเตเดชเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดชเต‡เดฐเต เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเต - PostgreSQL, เด’เดฐเต เดตเดฟเดตเดฐเดฃเด‚, เดˆ เด—เตเดฐเต‚เดชเตเดชเต เดเดคเต VPC เดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดคเตเดคเดฃเดฎเต†เดจเตเดจเต เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด• เดฌเดŸเตเดŸเตบ เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเด•:
เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เดšเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ เด•เดพเดฃเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดชเตเดคเตเดคเดพเดฏเดฟ เดธเตƒเดทเตเดŸเดฟเดšเตเดš เด—เตเดฐเต‚เดชเตเดชเดฟเดจเดพเดฏเดฟ เดชเต‹เตผเดŸเตเดŸเต 5432-เดจเตเดณเตเดณ เด‡เตปเดฌเต—เดฃเตเดŸเต เดจเดฟเดฏเดฎเด™เตเด™เตพ เดชเต‚เดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเด•. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเต‹เตผเดŸเตเดŸเต เดธเตเดตเดฎเต‡เดงเดฏเดพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ, เดชเด•เตเดทเต‡ เดŸเตˆเดชเตเดชเต เดกเตเดฐเต‹เดชเตเดชเต-เดกเต—เตบ เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต PostgreSQL เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•.

เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดชเดฑเดžเตเดžเดพเตฝ, เดฎเต‚เดฒเตเดฏเด‚ ::/0 เดŽเดจเตเดจเดพเตฝ เดฒเต‹เด•เดฎเต†เดฎเตเดชเดพเดŸเตเดฎเตเดณเตเดณ เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เด‡เตปเด•เดฎเดฟเด‚เด—เต เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเตเดฑเต† เดฒเดญเตเดฏเดค เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เด•เดพเดจเต‹เดจเดฟเด•เดฎเดพเดฏเดฟ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดถเดฐเดฟเดฏเดฒเตเดฒ, เดชเด•เตเดทเต‡ เด‰เดฆเดพเดนเดฐเดฃเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเดพเตป, เดˆ เดธเดฎเต€เดชเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดจเดฎเตเด•เตเด•เต เดธเตเดตเดฏเด‚ เด…เดจเตเดตเดฆเดฟเด•เตเด•เดพเด‚:
เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เดžเด™เตเด™เตพ เดฌเตเดฐเต—เดธเตผ เดชเต‡เดœเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเดจเตเดจเต, เด…เดตเดฟเดŸเต† "เดตเดฟเดชเตเดฒเดฎเดพเดฏ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•" เดคเตเดฑเดจเตเดจเต VPC เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เด—เตเดฐเต‚เดชเตเดชเตเด•เดณเตเดŸเต† เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด• -> เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ VPC เดธเตเดฐเด•เตเดทเดพ เด—เตเดฐเต‚เดชเตเดชเตเด•เตพ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด• -> PostgreSQL:
เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด“เดชเตเดทเดจเตเด•เดณเดฟเตฝ -> เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดจเดพเดฎเด‚ -> เดชเต‡เดฐเต เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด• - habrDB.

เดฌเดพเด•เตเด•เดชเตเดชเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต (เดฌเดพเด•เตเด•เดชเตเดชเต เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตฝ เด•เดพเดฒเดฏเดณเดตเต - 0 เดฆเดฟเดตเดธเด‚), เดฎเต‹เดฃเดฟเดฑเตเดฑเดฑเดฟเด‚เด—เต, เดชเตเดฐเด•เดŸเดจ เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเด•เตเด•เดฃเด•เตเด•เตเด•เตพ เดŽเดจเตเดจเดฟเดต เด’เดดเดฟเด•เต†เดฏเตเดณเตเดณ เดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดจเดฎเตเด•เตเด•เต เดกเดฟเดซเต‹เตพเดŸเตเดŸเดพเดฏเดฟ เด‰เดชเต‡เด•เตเดทเดฟเด•เตเด•เดพเด‚. เดฌเดŸเตเดŸเดฃเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด• เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•:
เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เดคเตเดฐเต†เดกเต เดนเดพเตปเดกเตเดฒเตผ

เด“เดฐเต‹ เดฐเดฃเตเดŸเต เดธเต†เด•เตเด•เตปเดกเดฟเดฒเตเด‚ เด•เดพเดซเตเด•เดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฐเตเดจเตเดจ เดชเตเดคเดฟเดฏ เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดซเดฒเด‚ เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดธเตเดชเดพเตผเด•เตเด•เต เดœเต‹เดฒเดฟเดฏเตเดŸเต† เดตเดฟเด•เดธเดจเดฎเดพเดฃเต เด…เดตเดธเดพเดจ เด˜เดŸเตเดŸเด‚.

เดฎเตเด•เดณเดฟเตฝ เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†, เดคเต†เดฑเตเดฑเต เดธเดนเดฟเดทเตเดฃเตเดค เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดฒเต† เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดธเด‚เดตเดฟเดงเดพเดจเดฎเดพเดฃเต เดšเต†เด•เตเด•เต เดชเต‹เดฏเดฟเดจเตเดฑเตเด•เตพ. เดžเด™เตเด™เตพ เดšเต†เด•เตเด•เตโ€Œเดชเต‹เดธเตเดฑเตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด‚ เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดฎเตŠเดกเตเดฏเต‚เดณเดฟเดจเต เด…เดตเดธเดพเดจ เดšเต†เด•เตเด•เต เดชเต‹เดฏเดฟเดจเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเด•เดฏเตเด‚ เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เดฃเด•เตเด•เตเด•เต‚เดŸเตเดŸเดฒเตเด•เตพ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตโ€Œเดคเดพเตฝ เดฎเดพเดคเตเดฐเด‚ เดฎเดคเดฟ, เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเดŸ เดกเดพเดฑเตเดฑ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เดพเตป.

เดšเต†เด•เตเด•เตโ€Œเดชเต‹เดฏเดฟเดจเตเดฑเต เดตเดฟเดตเดฐเด™เตเด™เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจ เดคเด•เดฐเดพเตผ-เดธเดนเดฟเดทเตเดฃเตเดคเดฏเตเดณเตเดณเดคเตเด‚ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดตเตเดฎเดพเดฏ เดซเดฏเตฝ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตฝ (HDFS, S3, เดฎเตเดคเดฒเดพเดฏเดต) เด’เดฐเต เดกเดฏเดฑเด•เตเดŸเดฑเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เดšเต†เด•เตเด•เตโ€Œเดชเต‹เดฏเดฟเดจเตเดฑเดฟเด‚เด—เต เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดพเด‚. เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:

streamingContext.checkpoint(checkpointDirectory)

เดžเด™เตเด™เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เดžเด™เตเด™เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดธเดฎเต€เดชเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เด…เดคเดพเดฏเดคเต, เดšเต†เด•เตเด•เตโ€Œเดชเต‹เดฏเดฟเดจเตเดฑเต เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟ เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดšเต†เด•เตเด•เตโ€Œเดชเต‹เดฏเดฟเดจเตเดฑเต เดกเดพเดฑเตเดฑเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเดจเตเดฆเตผเดญเด‚ เดชเตเดจเตผเดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด‚. เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟ เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ (เด…เดคเดพเดฏเดคเต เด†เดฆเตเดฏเดฎเดพเดฏเดฟ เดŽเด•เตโ€Œเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตโ€Œเดคเดคเต), เด’เดฐเต เดชเตเดคเดฟเดฏ เดธเดจเตเดฆเตผเดญเด‚ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดกเดฟเดธเตโ€ŒเดŸเตเดฐเต€เดฎเตเด•เตพ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฎเดพเดฏเดฟ เดซเด‚เด—เตโ€ŒเดทเตปToCreateContext-เดจเต† เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต:

from pyspark.streaming import StreamingContext

context = StreamingContext.getOrCreate(checkpointDirectory, functionToCreateContext)

KafkaUtils เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเดŸเต† createDirectStream เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต "เด‡เดŸเดชเดพเดŸเต" เดตเดฟเดทเดฏเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ เด’เดฐเต DirectStream เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต:

from pyspark.streaming.kafka import KafkaUtils
    
sc = SparkContext(conf=conf)
ssc = StreamingContext(sc, 2)

broker_list = 'localhost:9092'
topic = 'transaction'

directKafkaStream = KafkaUtils.createDirectStream(ssc,
                                [topic],
                                {"metadata.broker.list": broker_list})

JSON เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเตฝ เด‡เตปเด•เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเดพเดดเตโ€Œเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

rowRdd = rdd.map(lambda w: Row(branch=w['branch'],
                                       currency=w['currency'],
                                       amount=w['amount']))
                                       
testDataFrame = spark.createDataFrame(rowRdd)
testDataFrame.createOrReplaceTempView("treasury_stream")

Spark SQL เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดžเด™เตเด™เตพ เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด—เตเดฐเต‚เดชเตเดชเดฟเด‚เด—เต เดจเดŸเดคเตเดคเตเด•เดฏเตเด‚ เด•เตบเดธเต‹เดณเดฟเตฝ เดซเดฒเด‚ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

select 
    from_unixtime(unix_timestamp()) as curr_time,
    t.branch                        as branch_name,
    t.currency                      as currency_code,
    sum(amount)                     as batch_value
from treasury_stream t
group by
    t.branch,
    t.currency

เด…เดจเตเดตเต‡เดทเดฃ เดตเดพเดšเด•เด‚ เดจเต‡เดŸเตเด•เดฏเตเด‚ เด…เดคเต Spark SQL เดตเดดเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

sql_query = get_sql_query()
testResultDataFrame = spark.sql(sql_query)
testResultDataFrame.show(n=5)

เดคเตเดŸเตผเดจเตเดจเต, เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ เดธเด‚เด—เตเดฐเดนเดฟเดšเตเดš เดกเดพเดฑเตเดฑ เดžเด™เตเด™เตพ AWS RDS-เตฝ เด’เดฐเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต. เด…เด—เตเดฐเด—เต‡เดทเตป เดซเดฒเด™เตเด™เตพ เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ DataFrame เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดฑเตˆเดฑเตเดฑเต เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚:

testResultDataFrame.write 
    .format("jdbc") 
    .mode("append") 
    .option("driver", 'org.postgresql.Driver') 
    .option("url","jdbc:postgresql://myhabrtest.ciny8bykwxeg.us-east-1.rds.amazonaws.com:5432/habrDB") 
    .option("dbtable", "transaction_flow") 
    .option("user", "habr") 
    .option("password", "habr12345") 
    .save()

AWS RDS-เดฒเต‡เด•เตเด•เต เด’เดฐเต เด•เดฃเด•เตเดทเตป เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เตเดฑเดšเตเดšเต เดตเดพเด•เตเด•เตเด•เตพ. "AWS PostgreSQL เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเต" เดŽเดจเตเดจ เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เด…เดคเดฟเดจเดพเดฏเดฟ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเตเด‚ เดชเดพเดธเตโ€Œเดตเต‡เดกเตเด‚ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต. เด•เดฃเด•เตเดฑเตเดฑเดฟเดตเดฟเดฑเตเดฑเดฟ & เดธเต†เด•เตเดฏเต‚เดฐเดฟเดฑเตเดฑเดฟ เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเต†เตผเดตเตผ url เด†เดฏเดฟ เดจเดฟเด™เตเด™เตพ Endpoint เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเด‚:

เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เดธเตเดชเดพเตผเด•เตเด•เดฟเดจเต†เดฏเตเด‚ เด•เดพเดซเตเด•เดฏเต†เดฏเตเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเดฎเดพเตผเด•เตเด•เต-เดธเดฌเตเดฎเดฟเดฑเตเดฑเต เดตเดดเดฟ เดจเดฟเด™เตเด™เตพ เดœเต‹เดฒเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดฃเด‚. spark-streaming-kafka-0-8_2.11. เด•เต‚เดŸเดพเดคเต†, PostgreSQL เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเตเดฎเดพเดฏเดฟ เดธเด‚เดตเดฆเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ เด’เดฐเต เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตเดฑเตเดฑเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚; เดžเด™เตเด™เตพ เด…เดต --เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เดตเดดเดฟ เด•เตˆเดฎเดพเดฑเตเด‚.

เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดจเตเดฑเต† เดตเดดเด•เตเด•เดคเตเดคเดฟเดจเดพเดฏเดฟ, เดธเดจเตเดฆเต‡เดถ เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดชเต‡เดฐเตเด‚ เดกเดพเดฑเตเดฑ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจ เดตเดฟเดทเดฏเดตเตเด‚ เดžเด™เตเด™เตพ เด‡เตปเดชเตเดŸเตเดŸเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเดพเดฏเดฟ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเด‚.

เด…เดคเดฟเดจเดพเตฝ, เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเดจเตเด‚ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดค เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเดจเตเดฎเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเต:

spark-submit 
--packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.0.2,
org.postgresql:postgresql:9.4.1207 
spark_job.py localhost:9092 transaction

เดŽเดฒเตเดฒเดพเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเต! เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ เดšเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด“เดฐเต‹ 2 เดธเต†เด•เตเด•เตปเดกเดฟเดฒเตเด‚ เดชเตเดคเดฟเดฏ เด…เด—เตเดฐเด—เต‡เดทเตป เดซเดฒเด™เตเด™เตพ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ เดžเด™เตเด™เตพ StreamingContext เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดšเดชเตเดชเต‹เตพ เดฌเดพเดšเตเดšเดฟเด‚เด—เต เด‡เดŸเดตเต‡เดณ 2 เดธเต†เด•เตเด•เตปเดกเดพเดฏเดฟ เดธเดœเตเดœเดฎเดพเด•เตเด•เดฟ:

เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดชเดŸเตเดŸเดฟเด•เดฏเดฟเดฒเต† เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เดณเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด…เดจเตเดตเต‡เดทเดฃเด‚ เดจเดŸเดคเตเดคเตเดจเตเดจเต เด‡เดŸเดชเดพเดŸเต_เดซเตเดฒเต‹:

เด…เดชเตเดชเดพเดšเตเดšเต† เด•เดพเดซเตเด•เดฏเตเด‚ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตŠเดชเตเดชเด‚ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดกเดพเดฑเตเดฑ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เตเด‚

เดคเต€เดฐเตเดฎเดพเดจเด‚

Apache Kafka, PostgreSQL เดŽเดจเตเดจเดฟเดตเดฏเตเดฎเดพเดฏเดฟ เดšเต‡เตผเดจเตเดจเต เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเดฟเดตเดฐเด™เตเด™เดณเตเดŸเต† เดธเตเดŸเตเดฐเต€เด‚ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เดฟเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดˆ เดฒเต‡เด–เดจเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต. เดตเดฟเดตเดฟเดง เดธเตเดฐเต‹เดคเดธเตเดธเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดตเดณเตผเดšเตเดšเดฏเต‹เดŸเต†, เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เตเด‚ เดคเดคเตเดธเดฎเดฏ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดธเตเดชเดพเตผเด•เตเด•เต เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เดฟเดจเตเดฑเต† เดชเตเดฐเดพเดฏเต‹เด—เดฟเด• เดฎเต‚เดฒเตเดฏเด‚ เด…เดฎเดฟเดคเดฎเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเดคเต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต.

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดฑเต† เดถเต‡เด–เดฐเดคเตเดคเดฟเตฝ เดฎเตเดดเตเดตเตป เดธเต‹เดดเตโ€Œเดธเต เด•เต‹เดกเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚ เดธเดพเดฎเต‚เดนเดฟเด•เด‚.

เดˆ เดฒเต‡เด–เดจเด‚ เดšเตผเดšเตเดš เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเตฝ เดŽเดจเดฟเด•เตเด•เต เดธเดจเตเดคเต‹เดทเดฎเตเดฃเตเดŸเต, เดจเดฟเด™เตเด™เดณเตเดŸเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เด•เดฐเตเดคเดฒเตเดณเตเดณ เดŽเดฒเตเดฒเดพ เดตเดพเดฏเดจเด•เตเด•เดพเดฐเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เด•เตเดฐเดฟเดฏเดพเดคเตเดฎเด•เดฎเดพเดฏ เดตเดฟเดฎเตผเดถเดจเดตเตเด‚ เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.

เดžเดพเตป เดจเดฟเดจเตเดจเต† เดตเดฟเดœเดฏเด‚ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต!

เดธเด™เตเด•เต€. เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ เด’เดฐเต เดชเตเดฐเดพเดฆเต‡เดถเดฟเด• PostgreSQL เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดชเดฆเตเดงเดคเดฟเดฏเดฟเดŸเตเดŸเดฟเดฐเตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ AWS-เดจเต‹เดŸเตเดณเตเดณ เดŽเดจเตเดฑเต† เด‡เดทเตเดŸเด‚ เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเดคเตเดคเต, เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด•เตเดฒเต—เดกเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต. เดˆ เดตเดฟเดทเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด…เดŸเตเดคเตเดค เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, AWS Kinesis, AWS EMR เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต AWS-เตฝ เดฎเตเด•เดณเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดš เดฎเตเดดเตเดตเตป เดธเดฟเดธเตเดฑเตเดฑเดตเตเด‚ เดŽเด™เตเด™เดจเต† เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดžเดพเตป เด•เดพเดฃเดฟเด•เตเด•เตเด‚. เดตเดพเตผเดคเตเดค เดชเดฟเดจเตเดคเตเดŸเดฐเตเด•!

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•